Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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
在WCF服务操作中引发异常,有什么需要注意的吗?_Wcf_Exception - Fatal编程技术网

在WCF服务操作中引发异常,有什么需要注意的吗?

在WCF服务操作中引发异常,有什么需要注意的吗?,wcf,exception,Wcf,Exception,我正在学习WCF,并编写了一个承载WCF服务的Windows服务。自从我在远程服务器的service.msc中启动它(物理上远程,速度非常慢)以来,我想我已经在这里和那里找到并修复了大约一百个错误。我现在终于被卡住了 现在,我已经启用了跟踪和消息日志记录。第一个也是唯一一个函数调用如下所示: [OperationContract] public MyServiceResponse ConnectToAXDynamicsViaDotNET2BusinessConnectorWithSadFace(

我正在学习WCF,并编写了一个承载WCF服务的Windows服务。自从我在远程服务器的service.msc中启动它(物理上远程,速度非常慢)以来,我想我已经在这里和那里找到并修复了大约一百个错误。我现在终于被卡住了

现在,我已经启用了跟踪和消息日志记录。第一个也是唯一一个函数调用如下所示:

[OperationContract]
public MyServiceResponse ConnectToAXDynamicsViaDotNET2BusinessConnectorWithSadFace()
{
    try
    {
        throw new NotImplemented();
    }
    catch(Exception ex)
    {
         return new MyServiceResponse(ex, ex.Message);
    }
}

[DataContract]
public class MyServiceResponse
{
     // ...
}
在调用操作时,客户端只是坐着等待,直到超时。检查跟踪,它会记录我抛出的异常。所以我想知道WCF是否真的阻止了它,而忽略了我的catch子句

然后,我只测试了一个简单的返回值,没有抛出,它最终工作了

我的问题是,那么我如何才能使上述场景工作,即捕获异常并将合理的结果返回给客户机?也许只是跟踪阻碍了我,但我想在整个调试过程中启用跟踪,否则很难工作

谢谢你宝贵的帮助


编辑:抱歉,我在发布此问题后立即发现了此问题。这种事一直都在发生,但我还没有读到它,因为我现在要跑了。我不确定它是否能解决我的问题。

有被否决的风险,但仅仅是出于文档的考虑和提出这个问题的一般用途:

通过阅读FaultException处理文章,我猜上述行为是由于异常类不可序列化所致。即使启用了“向客户端发送(未知)故障”,服务也会自动断开自身连接,而不会返回任何错误消息。至于为什么会这样,我还不知道。如果我发现更多,将会更新


此后,我改为抛出新的FaultException(),而不是返回我自己的MyServiceResponses。

无论是跟踪还是捕获异常的方式,都不会导致任何问题。我猜你还有别的事。如果不抛出异常,只返回响应,会发生什么?尝试一下,然后通过WCF测试客户端调用您的服务。您能成功呼叫服务吗?谢谢chris.house.00;正如我在OP中提到的,“然后,我只使用一个简单的返回值进行测试,而没有抛出,它最终会工作。”最大的问题是:您正在吞噬异常的细节。当您知道确切发生了什么时,请使用特定的
FaultException
,并在
[FaultContract]
中定义。否则,就不要捕获异常,让WCF处理它。@JohnSaunders抱歉,我刚刚编辑了代码。我还试图同时传递异常对象。我知道这违反了服务模型规则等。这只是测试代码。我在学习。无论如何,我现在使用FaultException。不过,感谢您的回复。此外,当FaultException中的CustomData出现序列化问题时,例如DataMember没有setter,它也会无声地断开连接。