コード例 #1
0
        internal void CopyFrom(ProxyBaseResult SvcBaseResult)
        {
            _resultCode    = (SeverityLevel)SvcBaseResult.ResultCode;
            _transactionId = SvcBaseResult.TransactionId;

            if (SvcBaseResult.Messages != null)
            {
                for (int i = 0; i < SvcBaseResult.Messages.Length; i++)
                {
                    //Ignore clientMetrics message
                    if (SvcBaseResult.Messages[i].Name != null && SvcBaseResult.Messages[i].Name.ToLower() != "clientmetricsrequest")
                    {
                        Message message = new Message();
                        message.CopyFrom(SvcBaseResult.Messages[i]);
                        _messages.Add(message);
                    }
                }
            }

            if (SvcBaseResult.InvoiceInfoMessages != null)
            {
                for (int i = 0; i < SvcBaseResult.InvoiceInfoMessages.Length; i++)
                {
                    InvoiceMessage message = new InvoiceMessage();
                    message.CopyFrom(SvcBaseResult.InvoiceInfoMessages[i]);
                    _invoiceMessages.Add(message);
                }
            }
        }
        /// <summary>
        /// Filter ORM and Sql messages like ORMQueryExecutionException and SqlException
        /// </summary>
        /// <param name="result"></param>
        internal void FilterMessage(ProxyBaseResult result)
        {
            if (result == null || result.Messages == null)
            {
                return;
            }

            foreach (ProxyMessage message in result.Messages)
            {
                if (message.Name != null && (message.Name.IndexOf("ORM") > -1 || message.Name.IndexOf("SqlException") > -1))
                {
                    message.Name     = "Exception";
                    message.Summary  = "This operation could not be completed.";
                    message.Details  = String.Empty;
                    message.RefersTo = String.Empty;
                }
            }
        }
        /// <summary>
        /// Completes the transaction and log all the transaction details to log file.
        /// </summary>
        /// <param name="result"></param>
        /// <param name="transaction"></param>
        internal void EndTransaction(ProxyBaseResult result, Transaction transaction)
        {
            if (result == null)
            {
                return;
            }

            if (AvaLoggerConfiguration.LogTransactions && transaction != null)
            {
                transaction.SeverityLevelId = (byte)result.ResultCode;
                transaction.TransactionId   = result.TransactionId;
                transaction.ReferenceCode   = result.ReferenceCode;

                if (transaction.SeverityLevelId >= (int)SeverityLevel.Error && result.Messages != null && result.Messages.Length > 0)
                {
                    foreach (ProxyMessage message in result.Messages)
                    {
                        if (message.Severity == result.ResultCode)
                        {
                            if (message.Name == "SqlException")
                            {
                                transaction.ErrorMessage = message.Name + ": " + message.Summary;
                            }
                            else
                            {
                                transaction.ErrorMessage = message.Name;
                            }
                            break;
                        }
                    }
                }

                // Logs all the transaction details to log file
                transaction.Log();
            }

            FilterMessage(result);
        }
        /// <summary>
        /// Inspects an exception for type and determines the appropriate custom or generic exception that should be rethrown.
        /// </summary>
        /// <param name="e">The exception caught by a consumer-facing method.</param>
        internal static BaseResult HandleException(Exception e)
        {
            AvaTaxException avaEx;
            Exception       ex;
            AvaLogger       _avaLog1 = AvaLogger.GetLogger();

            if ((e.GetType() == typeof(System.Reflection.TargetInvocationException)) && (e.InnerException != null))
            {
                ex = e.InnerException;
            }
            else if (e.InnerException != null && (e.InnerException.GetType() == typeof(System.Net.WebException)))
            {
                ex = e.InnerException;
            }
            else
            {
                ex = e;
            }

            if (ex.GetType() == typeof(System.Net.WebException))
            {
                System.Net.WebException webEx = (System.Net.WebException)ex;
                _avaLog1.Error(webEx.Message);

                ProxyBaseResult proxyResult = new ProxyBaseResult();
                proxyResult.ResultCode           = ProxySeverityLevel.Error;
                proxyResult.Messages             = new ProxyMessage[1];
                proxyResult.Messages[0]          = new ProxyMessage();
                proxyResult.Messages[0].Severity = ProxySeverityLevel.Error;
                proxyResult.Messages[0].Summary  = webEx.Message;
                proxyResult.Messages[0].Source   = webEx.Source;
                proxyResult.Messages[0].HelpLink = webEx.HelpLink;
                proxyResult.Messages[0].Name     = webEx.GetType().ToString();

                BaseResult result = new BaseResult();
                result.CopyFrom(proxyResult);

                return(result);
            }
            else if (ex.GetType() == typeof(SoapException))
            {
                SoapException soapEx = (SoapException)ex;
                _avaLog1.Fail(soapEx.Message);
                avaEx = new AvaTaxException(soapEx);
                throw avaEx;
            }
            else if (ex.GetType() == typeof(SoapHeaderException))
            {
                SoapHeaderException soapHeaderEx = (SoapHeaderException)ex;
                avaEx = new AvaTaxException(soapHeaderEx);
                _avaLog1.Fail(soapHeaderEx.Message);
                throw avaEx;
            }
            else if (ex.GetType() == typeof(InvalidOperationException))
            {
                InvalidOperationException operationEx = (InvalidOperationException)ex;
                _avaLog1.Fail(operationEx.Message);
                if (operationEx.InnerException != null)
                {
                    throw operationEx.InnerException;
                }
                else
                {
                    throw operationEx;
                }
            }
            else
            {
                _avaLog1.Fail(ex.Message);
                throw ex;
            }
        }