Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过WCF序列化异常_C#_Wcf_Exception Handling - Fatal编程技术网

C# 通过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

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

客户:

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
      对象的情况下。这额外的一点点就够了。