我有两种不同的WCF服务,主要是您的基本CRUD操作。对于这两种服务,无论客户端如何,如果服务引发异常,该异常将不会返回给客户端。实际上,我可以看到实际异常的唯一方法是打开服务中的跟踪并查看跟踪文件。双向WCF服务操作不会返回任何异常
无论抛出什么异常,情况都是如此。例如,如果我发送的字符串值的长度大于我的服务的绑定配置所允许的长度,则会按照预期生成NetDispatcherFaultException异常并显示以下消息:
格式化程序尝试反序列化时引发异常该消息:尝试反序列化参数http://tempuri.org/:newItem时发生错误。 InnerException消息是'反序列化Organization.Division.Application.Service.AddNewItem类型的对象时发生错误。 在读取XML数据时,已超出最大字符串内容长度配额(8192)。可以通过更改创建XML阅读器时使用的XmlDictionaryReaderQuotas对象上的MaxStringContentLength属性来增加此配额。 1号线,位置20157.'。
的问题是,这种异常不是由服务返回的,而是服务引发ArgumentNullException与异常消息:
值不能为空。
参数名:未能调用:消息...和我的客户只是给了我这个错误(我的客户是否是一个ASP.NET网页,WCF测试客户端,或其他人,这是真的)服务。可能的原因:服务处于脱机状态或无法访问;客户端配置与代理不匹配;现有的代理无效。有关更多详细信息,请参阅堆栈跟踪。您可以尝试通过启动新代理,还原为默认配置或刷新服务来进行恢复。
错误详细信息:
接收到对http://localhost/Services/MyAwesomeS3rv1c3/DoSomethingGrrreat.svc的HTTP响应时发生错误。这可能是由于服务端点绑定不使用HTTP协议。这也可能是由于HTTP请求上下文被服务器中止(可能是由于服务关闭)。查看服务器日志获取更多详细信
当我查看服务跟踪时,我还看到此警告:请求/回复操作AddNewItem没有回复消息。
我假设我正在做一些系统错误的事情,因为这会发生,无论引发的基础异常,多个服务以及每个服务的多个方法。我无法辨别出问题所在。我只是想将错误返回给客户端。
了解更多的背景信息,我必须在服务的web.config <serviceBehavior><behavior>...
下进行以下设置:
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
...和我使用的wsHttpBinding和MEX绑定。
最后,这似乎是一个相当近期的行为变化(即客户端用于查看服务抛出的实际异常)。我只是无法弄清楚可能会发生什么。
FWIW,我最近有完全相同的问题:找到它的唯一方法显然是使用WCF跟踪。幸运的是,在我的情况下,它发生在开发过程中。 – 2010-10-15 20:26:57
感谢您的评论。没有WCF跟踪,我已经完全失去了!对于其他人,http://msdn.microsoft.com/en-us/library/ms732023.aspx详细介绍了如何设置跟踪。现在我只需要弄清楚如何让这些异常细节传递回客户端:-) – schellack 2010-10-15 21:14:12