我应该忽略WCF中的第一次机会异常吗?

时间:2014-01-16 08:24:17

标签: c# wcf faultexception

在Visual Studio中运行WCF服务,我在Debug输出中看到了大量异常。

A first chance exception of type 'System.ServiceModel.FaultException' occurred in System.ServiceModel.dll
A first chance exception of type 'System.InvalidOperationException' occurred in System.ServiceModel.Channels.dll

它们似乎被不规则地抛出:无论如何我都无法解决任何模式(即每隔几秒到几十秒)。

如果我将调试设置为在FaultException上中断,我发现它们被System.ServiceModel.Dispatcher.ErrorBehavior.ThrowAndCatch(Exception e, Message message)抛出。

异常消息是{"The message with To '' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree."}

显而易见的答案似乎是“你的地址空洞”。但是在任何客户端连接之前发生

这只是'正常',还是我做错了什么的症状?

3 个答案:

答案 0 :(得分:4)

快速回答是“是的,你可以忽略第一次机会异常”。它们是实际已经处理过的例外。因此,它们应被视为正常执行工作流程。

Visual Studio会通知开发人员发生的每个异常,即使它已被处理。每个异常抛出一个“第一次机会异常”,它不会中断正常的调试会话。如果未处理此第一次机会异常,则调试会话将被“第二次机会异常”中断。 “第一次机会例外”的价值仅限于开发人员的洞察力知识。

在此blog post中,您可以看到有关第一次机会异常的更多详细信息。从引用的帖子中复制:

  

第一次机会异常是否意味着我的代码存在问题?   第一次机会异常消息通常并不意味着代码中存在问题。对于优雅处理异常的应用程序/组件,第一次机会异常消息让开发人员知道遇到并处理了异常情况。

希望我帮忙!

答案 1 :(得分:0)

通常情况下,如果您在调试窗口中看到第一次机会异常,但是如果它们没有崩溃,比如,w3wp.exe进程在没有附加调试器的情况下运行时,您可以非常确定框架或生成的类正在捕获异常并处理它们。但是,如果存在过多的此类消息,或者您怀疑不应抛出任何消息,即使已处理,也可以使用Visual Studio的异常设置来中断已处理的错误,以便进行调试/跟踪。

答案 2 :(得分:0)

我同意从框架中抛出的所有第一次机会异常都可以被安全地忽略,我们发现如果吞下一个感知(而不是'处理'),捕获隐藏/非常难以复制生产代码库上的错误很有用。为FirstChance异常附加处理程序,这些异常记录到单独的日志文件并且仅在QA环境中启用(这些日志很大)帮助我们在自己的代码库中找到了几个错误。开发人员会在一天结束时查看日志文件中的任何不应安全忽略的内容。

虽然这些错误应该从来没有出现在代码中,如果有人没有决定只是吞下一个例外,在一个混乱的现实世界中,这是一个很好的工具,可以持续提高代码库的质量。