c# - 通过 WCF 序列化异常

标签 c# wcf exception-handling

我有一个任务在使用 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/

相关文章:

c# - OperationContext 中的 header

c# - Web 服务中的多个早期绑定(bind)文件

c# - 从代理后面的应用程序连接 WCF 服务 - 测试模拟

java - 我是否应该从我的服务中抛出可重试的异常

c# - 按两个值分组并计算第三个值

c# - 如何循环我的音频文件?

c# - 如何将 GetStringAsync 结果反序列化为翻译文本

c# - 对内存位置的无效访问 - 管理到非托管代码

python - 一种方法允许引发多种类型的异常还是只引发一种更好?

database - Zend_Db_Table : What happens when insert results in an error?