C# 通过WCF序列化异常
我有一个任务在远程系统上运行,该系统使用WCF连接回服务器。任务很可能会抛出异常,我希望这些异常被引导回服务器。基本上我想做这样的事情: 客户:C# 通过WCF序列化异常,c#,wcf,exception-handling,C#,Wcf,Exception Handling,我有一个任务在远程系统上运行,该系统使用WCF连接回服务器。任务很可能会抛出异常,我希望这些异常被引导回服务器。基本上我想做这样的事情: 客户: server.SendException(new UnauthorizedAccessException("Some Exception")); 服务器: public void SendException(Exception e) { throw e; } 合同: [ServiceContract] public interface IS
server.SendException(new UnauthorizedAccessException("Some Exception"));
服务器:
public void SendException(Exception e)
{
throw e;
}
合同:
[ServiceContract]
public interface IServerContract
{
[OperationContract]
void SendException(Exception e);
}
我已经读了一些关于故障异常的内容,但据我所知,它们用于在一个名为over WCF的方法中运行的特定异常。我想要的是发送应用程序在WCF上下文之外抛出的任何类型的异常,然后将它们传回服务器进行进一步处理。如果在解决方案中有所帮助,服务器还可以连接回客户端。您需要捕获服务器上的异常,并将其打包成SOAP故障,以便通过线路将其发送回。否则,您的客户机-服务器通道将“出现故障”且不可用 SOAP错误基本上是可互操作的SOAP,相当于.NET异常。您不应该抛出.NET异常,因为它们是特定于.NET的—WCF和SOA根据定义是系统不可知的 如果通信线路的两端确实保证为.NET,那么您可以轻松地将任何.NET异常打包为
FaultException
,从而使用符合SOAP的“传输工具”轻松地传回特定于.NET的异常信息
阅读更多有关SOAP故障的信息,以及如何将服务器上的.NET异常转换为连接上的SOAP故障:
- 为了我所需要的,我解决了自己的问题。我使用ServiceModel提供的ExceptionDetail类,并使用该类将相关异常数据发送回服务器。因此,基本上,如果客户端抛出异常,您希望它登录到服务器上?这是可能的,但我认为您可能需要提供更多关于服务、客户端之间通信链的详细信息和应用程序?它可能会帮助你从某人那里得到可靠的答案。要准确地了解您需要的内容有点困难。这是我找到的大多数地方要说的,不幸的是,我需要它朝着另一个方向发展,就像我试图捕获客户端异常并将它们发送到服务器一样。好吧,使用相同的机制:创建一个服务方法,例如“ReceiveFault”,并将其作为参数“FaultException”。现在,当客户端出现问题时,将.NET异常打包为FaultException并调用“ReceiveFault”“在您的服务器上,虽然我选择的方法有效,但这可能是更合适的方法。@marc_s在一个服务合同中,我没有实现逻辑,所以我得到了这个
throw new NotImplementedException()代码>。为什么它没有将它序列化到前端浏览器(使用webhttp)自从你发布这篇文章已经有一段时间了,但我想我会让你知道我终于找到了一种方法。解决方案正如您所指出的,exceptiondeail
可以工作,但仅在服务器不需要反序列化的Exception
对象的情况下。这额外的一点点就够了。