下午好,
我遇到了WCF和IntelliTrace的一个奇怪的问题。我有一个应用程序,我正在使用basicHttpBinding使用本地托管的WCF端点(VS2010内置的开发服务器)进行测试。应用程序一直运行正常:没有异常进入应用程序并且所有WCF调用都返回数据。
在云端,我决定看一下IntelliTrace输出,并注意到我第一次调用WCF引发了两个异常:
Exception:Thrown: "No connection could be made because the target machine actively refused it" (System.Net.Sockets.SocketException)
A System.Net.Sockets.SocketException was thrown: "No connection could be made because the target machine actively refused it"
Exception:Caught: "No connection could be made because the target machine actively refused it" (System.Net.Sockets.SocketException)
A System.Net.Sockets.SocketException was caught: "No connection could be made because the target machine actively refused it"
我已将应用程序简化为一个简单的用例:
ServiceClient client = new ServiceClient();
string[] output = client.LegacyCheck("username");
Console.WriteLine(output[0]);
Console.WriteLine(client.GetData(65));
我也有同样的行为。第二个电话没有与之相关的例外。
我很困惑。如果连接被拒绝,那么为什么异常不会影响应用程序呢?为什么在2次尝试失败后它会成功?
感谢任何帮助!
答案 0 :(得分:3)
对于它的价值,我已经注意到我的IronPython / WPF应用程序的这种行为。我最终意识到Intellitrace只是向您显示在正常操作期间引发和捕获的所有异常,即使它是BCL或其他库的一部分。
当然,您只需要担心未处理的异常(在它们中断执行之后,您通常会将IntelliTrace中的那些视为Thrown: Caught: Thrown: Caught:
的长链....一直到{{ 1}}这将是最后一行,因为没有捕获到异常。
我愿意打赌的是,WCF代码Thrown:
首先是一些事情,捕获SocketExceptions,然后继续它的快乐方式。你永远不会看到这个,但是对于IntelliTrace:)