在两个应用程序之间传递异常数据

时间:2017-11-24 06:43:58

标签: c# wcf exception

我不知道这是否已经得到回答。但是,我无法找到这个问题的例子或原因。

申请1:

 try
        {
                //Read request and check for the request header element from the soap request


                //validating request and salt
                ...here it might gets failed.
                _requestValidationService.ValidateRequest();
            }
 catch (Exception ex)
            {                              
                ex.Data.Add("Exception", "test");
                throw ex;
            }

申请2:

 catch (Exception ex)
            {
                string aa = Convert.ToString(ex.Data["Exception"]);

                throw ex;
            }

我不知道我在这里缺少什么。但 aa 似乎总是空的,ex.Data.Count始终为零。

我只想在两个应用程序之间传递一个代码而不添加新的异常类。

注意:这两个应用程序是wcf调用。

[EDIT1]

应用1验证请求是IDispatchMessageInspector AfterReceiveRequest

2 个答案:

答案 0 :(得分:1)

异常不会从WCF服务传播到客户端。相反,SOAP Fault(假设您正在使用SOAP)将被发送到客户端。

您可以在SOAP Fault中include exception details,但一般不建议在生产中这样做。

恕我直言,更好的方法是实现an IErrorHandler,它为您提供要发送给客户端的任何数据的Fault,并且还为您提供了记录服务器端异常的机会。

然后,您可以在客户端上捕获FaultException,并可以访问自定义错误处理程序添加的数据。

答案 1 :(得分:-1)

异常类由一个throw / catch对设计。如果您应该向缓存的异常添加任何其他信息,请通过重新抛出技术使用内部异常功能:

catch (Exception ex)
{
     ErrorHandling.WriteError(ex);
     var newEx = new MyException("Additional message", ex) // wrap the original exception instance.
     newEx.Data.Add("Exception", "test");
     throw newEx;
}

捕获包装器异常后,您可以在InnerException属性中找到原始异常。原始和包装器异常包含它们自己的堆栈跟踪的另一个优点是更容易找到错误源的位置。