通过WCF序列化异常

MGS*_*oto 12 c# wcf exception-handling

我有一个在使用WCF连接回服务器的远程系统上运行的任务.任务很可能会抛出异常,我希望将这些异常引导回服务器.基本上我想做这样的事情:

客户:

server.SendException(new UnauthorizedAccessException("Some Exception"));
Run Code Online (Sandbox Code Playgroud)

服务器:

public void SendException(Exception e)
{
    throw e;
}
Run Code Online (Sandbox Code Playgroud)

合同:

[ServiceContract]
public interface IServerContract
{
    [OperationContract]
    void SendException(Exception e);
}
Run Code Online (Sandbox Code Playgroud)

我一直在阅读有关故障异常的一些内容,但根据我的理解,它们用于在通过WCF调用的方法中运行的特定异常.我想要的是发送应用程序抛出WCF上下文之外的任何类型的异常,然后将它们传回服务器进行进一步处理.如果它有助于解决方案,则服务器还具有返回客户端的连接.

mar*_*c_s 10

您需要捕获服务器上的异常并将它们打包成SOAP故障,然后通过网络将它们发回.否则,您的客户端 - 服务器通道将"出现故障"且无法使用.

SOAP错误基本上是.NET异常的可互操作SOAP等价物.您不应该抛出.NET异常,因为它们是特定于.NET的 - WCF和SOA根据定义是系统无关的.

如果确保通信线路的两端都是.NET,则可以轻松地将任何.NET异常包装成a FaultException<T>,从而使用符合SOAP的"运输工具"轻松地回送特定于.NET的异常信息.

阅读有关SOAP故障的更多信息,以及如何将服务器上的.NET异常转换为线路上的SOAP故障:

  • 好吧,使用相同的机制:创建一个服务方法,例如"ReceiveFault",并使其参数为"FaultException <T>".现在,从客户端出现问题,将.NET异常包装成FaultException <T>并在服务器上调用"ReceiveFault" (2认同)

MGS*_*oto 6

为了我所需要的,我解决了自己的问题.我使用了ServiceModel提供的ExceptionDetail类,并使用它将相关的异常数据发送回服务器.