通过WCF序列化异常

时间:2009-12-18 19:14:26

标签: c# wcf exception-handling

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

客户端:

server.SendException(new UnauthorizedAccessException("Some Exception"));

服务器:

public void SendException(Exception e)
{
    throw e;
}

合同:

[ServiceContract]
public interface IServerContract
{
    [OperationContract]
    void SendException(Exception e);
}

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

2 个答案:

答案 0 :(得分:10)

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

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

如果确保通信线路的两端都是.NET,您可以轻松地将任何.NET异常包装到FaultException<T>中,从而使用符合SOAP的“传输”轻松地回送特定于.NET的异常信息车辆”。

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

答案 1 :(得分:6)

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