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; } }