예제 #1
0
        private bool retryExecute(netForumXMLSoapClient xWebClient, out XmlNode queryResults, string serviceName, string methodName, Parameter[] parameters)
        {
            bool ret = false;

            queryResults = null;
            for (int i = 0; i < Config.XWebRetryAttemps; i++)
            {
                _log.Error("Retrying ExecuteMethod attempt#: " + i.ToString());
                try
                {
                    queryResults = xWebClient.ExecuteMethod(ref _authToken, serviceName, methodName, parameters);
                    if (queryResults != null)
                    {
                        return(true);
                    }
                }
                catch
                {
                    //ignore exception and retry
                }

                Thread.Sleep(Config.XWebRetryWait);
            }

            return(ret);
        }
예제 #2
0
        private bool retryUpdate(netForumXMLSoapClient xWebClient, out XmlNode queryResults, string objectName, XmlNode oNode, string objectKey)
        {
            bool ret = false;

            queryResults = null;
            for (int i = 0; i < Config.XWebRetryAttemps; i++)
            {
                _log.Error("Retrying updateFacadeObject attempt#: " + i.ToString());
                try
                {
                    queryResults = xWebClient.UpdateFacadeObject(ref _authToken, objectName, objectKey, oNode);
                    if (queryResults != null)
                    {
                        return(true);
                    }
                }
                catch
                {
                    //ignore exception and retry
                }

                Thread.Sleep(Config.XWebRetryWait);
            }

            return(ret);
        }
예제 #3
0
        private bool retryGet(netForumXMLSoapClient xWebClient, out XmlNode queryResults, string objectName, string columnList, string whereClause, string orderBy)
        {
            bool ret = false;

            queryResults = null;
            for (int i = 0; i < Config.XWebRetryAttemps; i++)
            {
                _log.Error("Retrying getQuery attempt#: " + i.ToString());
                try
                {
                    queryResults = xWebClient.GetQuery(ref _authToken, objectName, columnList, whereClause, orderBy);
                    if (queryResults != null)
                    {
                        return(true);
                    }
                }
                catch
                {
                    //ignore exception and retry
                }
                Thread.Sleep(Config.XWebRetryWait);
            }

            return(ret);
        }
예제 #4
0
        private void getNewAuthToken()
        {
            netForumXMLSoapClient xWebClient = null;
            string strAuthResult;
            String logMethodName = ".getNewAuthToken() - ";

            _log.Debug(logMethodName + "Begin Method");

            try
            {
                _log.Debug(logMethodName + "Creating xWebClient.");
                xWebClient = new netForumXMLSoapClient();

                _log.Debug(logMethodName + "successfully created xWebClient.");

                _log.Debug(logMethodName + "Authiencticating Client");
                _authToken = xWebClient.Authenticate(Config.XWebLogin, Config.XWebPassword, out strAuthResult);
                _log.Info(logMethodName + "The current xWeb AuthToken being used by this application is: " + _authToken.Token);
            }
            catch (TimeoutException te)
            {
                _log.Error(logMethodName + "TimeoutException on xWeb service call.  make sure endpoint is reachable and configured correctly.", te);
                if (!retryAuth(xWebClient))
                {
                    ProxyHelper.HandleServiceException(xWebClient);
                    throw te;
                }
            }
            ////we do not want to retry these. These are errors that will not be fixed by a retry, i.e. invalid credentials
            //catch (FaultException fe)
            //{
            //    _log.Error(logMethodName + "There has been an error for an xWeb Auth operation: ", fe);
            //    throw fe;
            //}
            catch (CommunicationException ce)
            {
                _log.Error(logMethodName + "CommunicationException on xWeb service call.  make sure endpoint is reachable and configured correctly... this may be due to Token expiration", ce);
                if (!retryAuth(xWebClient))
                {
                    ProxyHelper.HandleServiceException(xWebClient);
                    throw ce;
                }
            }
            finally
            {
                if (xWebClient.State != CommunicationState.Closed)
                {
                    ProxyHelper.CloseChannel(xWebClient);
                }
            }
            _log.Debug(logMethodName + "End Method");
        }
예제 #5
0
        private static bool retryAuth(netForumXMLSoapClient xWebClient)
        {
            string strAuthResult;

            bool ret = false;

            for (int i = 0; i < Config.XWebRetryAttemps; i++)
            {
                _log.Error("Retrying authentication attempt#: " + i.ToString());
                try
                {
                    _authToken = xWebClient.Authenticate(Config.XWebLogin, Config.XWebPassword, out strAuthResult);
                }
                catch {}

                if (_authToken != null)
                {
                    return(true);
                }
                Thread.Sleep(Config.XWebRetryWait);
            }

            return(ret);
        }
예제 #6
0
        private XmlNode executeMethod(string serviceName, string methodName, Parameter[] parameters, bool isRetry)
        {
            String logMethodName = ".executeMethod(string serviceName, string methodName, Parameter[] parameters, bool isRetry) - ";

            _log.Debug(logMethodName + "Begin Method");

            XmlNode queryResults             = null;
            netForumXMLSoapClient xWebClient = null;

            try
            {
                _log.Debug(logMethodName + "Creating netForumXMLSoapClient.");
                xWebClient = new netForumXMLSoapClient();
                _log.Debug(logMethodName + "netForumXMLSoapClient created successfuly.");

                _log.Debug(logMethodName + "Calling netForumXMLSoapClient.ExecuteMethod(ASA.Web.Services.Common.xWeb.ExecuteMethodRequest request)");
                logExecuteMethod(serviceName, methodName, parameters, isRetry);
                queryResults = xWebClient.ExecuteMethod(ref _authToken, serviceName, methodName, parameters);
                _log.Debug(logMethodName + "netForumXMLSoapClient.ExecuteMethod(...) completed");
            }
            catch (TimeoutException te)
            {
                _log.Error(logMethodName + "executeMethod: TimeoutException on xWeb service call.  make sure endpoint is reachable and configured correctly.", te);
                if (!retryExecute(xWebClient, out queryResults, serviceName, methodName, parameters))
                {
                    ProxyHelper.HandleServiceException(xWebClient);
                    throw te;
                }
            }
            //we do not want to retry these. These are errors that will not be fixed by a retry, i.e. invalid credentials
            //catch (FaultException fe)
            //{
            //    _log.Error(logMethodName + "There has been an error for an xWeb Execute operation: ", fe);
            //    throw fe;
            //}
            catch (CommunicationException ce)
            {
                // This will cause the AuthorizationToken to be refreshed,
                // and it will perform ONE retry call to xWeb to GetQuery() following this CommunicationException
                if (isRetry == false && ce.Message.StartsWith("System.Web.Services.Protocols.SoapException: Failed"))
                {
                    ProxyHelper.HandleServiceException(xWebClient);
                    _log.Info(logMethodName + "executeMethod: Going to retry after getting a new Auth Token");
                    getNewAuthToken();
                    queryResults = executeMethod(serviceName, methodName, parameters, true);
                }
                else
                {
                    _log.Error(logMethodName + "executeMethod: CommunicationException on xWeb service call.  make sure endpoint is reachable and configured correctly... this may be due to Token expiration", ce);
                    if (!retryExecute(xWebClient, out queryResults, serviceName, methodName, parameters))
                    {
                        ProxyHelper.HandleServiceException(xWebClient);
                        throw ce;
                    }
                }
            }
            finally
            {
                if (xWebClient.State != CommunicationState.Closed)
                {
                    ProxyHelper.CloseChannel(xWebClient);
                }
            }

            _log.Debug(logMethodName + "End Method");

            return(queryResults);
        }
예제 #7
0
        private XmlNode updateFacadeObject(string objectName, string objectKey, XmlNode oNode, bool isRetry)
        {
            String logMethodName = ".updateFacadeObject(string objectName, string objectKey, XmlNode oNode, bool isRetry) - ";

            _log.Debug(logMethodName + "Begin Method");

            XmlNode queryResults             = null;
            netForumXMLSoapClient xWebClient = null;

            try
            {
                //throw new CommunicationException();
                _log.Debug(logMethodName + "Creating netForumXMLSoapClient.");
                xWebClient = new netForumXMLSoapClient();
                _log.Debug(logMethodName + "netForumXMLSoapClient created successfuly.");

                _log.Debug(logMethodName + "Calling netForumXMLSoapClient.UpdateFacadeObjectResponse ASA.Web.Services.Common.xWeb.netForumXMLSoap.UpdateFacadeObject(ASA.Web.Services.Common.xWeb.UpdateFacadeObjectRequest request)");
                logFacadeObject("UPDATE", objectName, objectKey, oNode, isRetry);
                queryResults = xWebClient.UpdateFacadeObject(ref _authToken, objectName, objectKey, oNode);
                _log.Debug(logMethodName + "netForumXMLSoapClient.UpdateFacadeObject(...) completed");
            }
            catch (TimeoutException te)
            {
                _log.Error(logMethodName + "updateFacadeObject: TimeoutException on xWeb service call.  make sure endpoint is reachable and configured correctly.", te);
                if (!retryUpdate(xWebClient, out queryResults, objectName, oNode, objectKey))
                {
                    ProxyHelper.HandleServiceException(xWebClient);
                    throw te;
                }
            }
            //we do not want to retry these. These are errors that will not be fixed by a retry, i.e. invalid credentials
            //catch (FaultException fe)
            //{
            //    _log.Error(logMethodName + "There has been an error for an xWeb UPDATE operation: ", fe);
            //    throw fe;
            //}
            catch (CommunicationException ce)
            {
                _log.Error(logMethodName + "There has been an error attempting to communicate with XWeb, attempting retry (if enabled)", ce);


                // This will cause the AuthorizationToken to be refreshed,
                // and it will perform ONE retry call to xWeb to GetQuery() following this CommunicationException
                if (isRetry == false && ce.Message.StartsWith("System.Web.Services.Protocols.SoapException: Failed"))
                {
                    ProxyHelper.HandleServiceException(xWebClient);
                    _log.Info(logMethodName + "updateFacadeObject: Going to retry after getting a new Auth Token");
                    getNewAuthToken();

                    _log.Debug(logMethodName + "Calling netForumXMLSoapClient.UpdateFacadeObjectResponse ASA.Web.Services.Common.xWeb.netForumXMLSoap.UpdateFacadeObject(ASA.Web.Services.Common.xWeb.UpdateFacadeObjectRequest request)");
                    queryResults = updateFacadeObject(objectName, objectKey, oNode, true);
                    _log.Debug(logMethodName + "netForumXMLSoapClient.UpdateFacadeObject(...) completed");

                    //what happens if this throws an exception?
                }
                else
                {
                    _log.Warn(logMethodName + "updateFacadeObject: CommunicationException on xWeb service call.  make sure endpoint is reachable and configured correctly... this may be due to Token expiration", ce);
                    if (!retryUpdate(xWebClient, out queryResults, objectName, oNode, objectKey))
                    {
                        ProxyHelper.HandleServiceException(xWebClient);
                        throw ce;
                    }
                }
            }
            finally
            {
                if (xWebClient.State != CommunicationState.Closed)
                {
                    ProxyHelper.CloseChannel(xWebClient);
                }
            }

            _log.Debug(logMethodName + "End Method");
            return(queryResults);
        }
예제 #8
0
        private XmlNode getQuery(string objectName, string columnList, string whereClause, string orderBy, bool isRetry)
        {
            String logMethodName = ".getQuery(string objectName, string columnList, string whereClause, string orderBy, bool isRetry) - ";

            _log.Debug(logMethodName + "Begin Method");

            XmlNode queryResults             = null;
            netForumXMLSoapClient xWebClient = null;

            try
            {
                _log.Debug(logMethodName + "Creating netForumXMLSoapClient.");
                xWebClient = new netForumXMLSoapClient();
                _log.Debug(logMethodName + "netForumXMLSoapClient Created Successfully");

                logGetQuery(objectName, columnList, whereClause, orderBy, isRetry);
                _log.Debug(logMethodName + "Calling netForumXMLSoapClient.GetQuery(ref ASA.Web.Services.Common.xWeb.AuthorizationToken AuthorizationToken, string szObjectName, string szColumnList, string szWhereClause, string szOrderBy)");
                queryResults = xWebClient.GetQuery(ref _authToken, objectName, columnList, whereClause, orderBy);
                _log.Debug(logMethodName + "xWebClient.GetQuery(...) completed");
            }
            catch (TimeoutException te)
            {
                _log.Error(logMethodName + "getQuery: TimeoutException on xWeb service call.  make sure endpoint is reachable and configured correctly.", te);

                if (!retryGet(xWebClient, out queryResults, objectName, columnList, whereClause, orderBy))
                {
                    ProxyHelper.HandleServiceException(xWebClient);
                    throw te;
                }
            }
            //we do not want to retry these. These are errors that will not be fixed by a retry, i.e. invalid credentials
            //catch (FaultException fe)
            //{
            //    _log.Error(logMethodName + "There has been an error for an xWeb GET operation: " + objectName, fe);
            //    throw fe;
            //}
            catch (CommunicationException ce)
            {
                _log.Error(logMethodName + "There has been an error attempting to communicate with XWeb, attempting retry (if enabled)", ce);


                // This will cause the AuthorizationToken to be refreshed,
                // and it will perform ONE retry call to xWeb to GetQuery() following this CommunicationException
                if (isRetry == false && ce.Message.StartsWith("System.Web.Services.Protocols.SoapException: Failed"))
                {
                    ProxyHelper.HandleServiceException(xWebClient);
                    _log.Info(logMethodName + "getQuery: Going to retry after getting a new Auth Token");
                    getNewAuthToken();

                    _log.Debug(logMethodName + "Calling netForumXMLSoapClient.GetQuery(ref ASA.Web.Services.Common.xWeb.AuthorizationToken AuthorizationToken, string szObjectName, string szColumnList, string szWhereClause, string szOrderBy)");
                    queryResults = getQuery(objectName, columnList, whereClause, orderBy, true);
                    _log.Debug(logMethodName + "xWebClient.GetQuery(...) completed");
                }
                else
                {
                    _log.Warn(logMethodName + "getQuery: CommunicationException on xWeb service call.  make sure endpoint is reachable and configured correctly... this may be due to Token expiration", ce);
                    if (!retryGet(xWebClient, out queryResults, objectName, columnList, whereClause, orderBy))
                    {
                        ProxyHelper.HandleServiceException(xWebClient);
                        throw ce;
                    }
                }
            }
            finally
            {
                if (xWebClient.State != CommunicationState.Closed)
                {
                    ProxyHelper.CloseChannel(xWebClient);
                }
            }

            _log.Debug(logMethodName + "End Method");
            return(queryResults);
        }