在WCF服务操作中抛出异常,需要注意什么?

时间:2011-12-06 09:48:32

标签: wcf exception

我刚刚学习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子句。

然后我只用一个简单的返回值进行测试而没有抛出,它最终有效。

我的问题是,我怎样才能使上述场景发挥作用,即。抓住异常并将合理的结果返回给客户?也许这只是阻止我的跟踪,但我希望在整个调试过程中启用跟踪,否则它真的很难工作。

感谢您的宝贵帮助!

编辑:抱歉,我在发布此问题后发现了这一点。一直发生的事情:http://msdn.microsoft.com/en-us/library/ee942778.aspx但是我还没读完它,因为我现在要逃跑了。不确定它会解决我的问题。

1 个答案:

答案 0 :(得分:0)

风险被低估,但仅仅是出于文档和提出这个问题的一般用处:

通过阅读FaultException处理文章,我猜测上面的行为是由于Exception类不可序列化。并且当启用“向客户端发送(未知)故障”时,服务将自动断开连接而不返回任何错误消息。至于它为什么这样做,我还不知道。如果我发现更多信息,将会更新。

我已经改变了抛出新的FaultException()而不是返回我自己的MyServiceResponses。