我有一个任务在使用 WCF 连接回服务器的远程系统上运行。任务很可能会抛出异常,我希望将这些异常传送回服务器。本质上我想做这样的事情:
客户:
server.SendException(new UnauthorizedAccessException("Some Exception"));
服务器:
public void SendException(Exception e)
{
throw e;
}
契约(Contract):
[ServiceContract]
public interface IServerContract
{
[OperationContract]
void SendException(Exception e);
}
我已经阅读了一些有关故障异常的内容,但据我了解,它们用于在通过 WCF 调用的方法中运行的特定异常。我想要的是发送应用程序在 WCF 上下文之外抛出的任何类型的异常,然后将它们引导回服务器以进行进一步处理。如果它对解决方案有帮助,服务器还会连接回客户端。
最佳答案
您需要捕获服务器上的异常并将它们打包成 SOAP 错误,以便通过网络将它们发回。否则,您的客户端-服务器 channel 将出现“故障”并且无法使用。
SOAP 错误基本上是 .NET 异常的可互操作 SOAP 等价物。您不应该抛出 .NET 异常,因为它们是特定于 .NET 的——根据定义,WCF 和 SOA 与系统无关。
如果确实保证通信线路的两端都是 .NET,您可以轻松地将任何 .NET 异常包装到 FaultException<T>
中。从而使用符合 SOAP 标准的“传输工具”轻松回传 .NET 特定的异常信息。
在此处阅读有关 SOAP 错误以及如何将服务器上的 .NET 异常转换为网络上的 SOAP 错误的更多信息:
关于c# - 通过 WCF 序列化异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1930152/