这是我的问题。我有几个Web客户端使用的中间件Web服务。 Web服务是一个打包服务,可以调用多个供应商的Web服务。对供应商的Web服务的调用包装在TryCatch中,但生成的任何异常不会被我的Web服务捕获,它们会陷入客户端应用程序中。尝试抓住 - 不捕捉
我错过了什么吗?这与这个posting有关吗?
这里有一个简单的代码片段:
Dim VendorWebservice as New VendorWebservice
Dim VendorResponse As VendorResponse = Nothing
Dim ClientResponse as New CustomClientResponse
Try
VendorResponse = VendorWebservice.VendorWebMethod
Catch ex As Exception
ClientResponse.ErrorMessage = ex.Message
ClientResponse.Status = "VendorError"
Return ClientResponse
End Try
编辑
要在一些细节扩展...该代码成功运行99 +%的时间。在罕见的情况下,供应商的网站存在一些问题,即发生此问题时。我已经为一个Web客户端和Web服务打开了VS,并且可以遍历客户端到WS的代码并返回。当我能够重现问题时,我已经将客户代码介绍到了它调用我们的Web服务的位置,然后切换到WS代码并逐步完成,直到它调用供应商代码,然后跳转到客户端代码,而不会触及Catch块或其后的任何代码。
希望有所帮助。
编辑
一些张贴的答案提供了途径,以研究,最notibly有可以创建未从System.Exception派生的异常。 (谁知道?)但是我也发现在.NET 2.0和更高版本中,这些非System.Exceptions被System.Exception中的.NET包装。所以理论上应该把非System.Exceptions定义出来。从理论上讲,在我的阅读中,当调用一个Web服务(就像我的Web服务所做的那样)时,理论上只有两种类型的异常真的应该被看到:System.Net.WebException和System.Web.Services.Protocols.SoapException ,这两者都从System.Exception派生。我不知道如果在调用Web服务时只有两种类型的异常是可能的,但我会把它抛出去。 :)
仍在寻找一个答案......
编辑
再现错误条件已被证明是难以捉摸的。我在代码中引发的每个场景都按预期做出了响应,错误被捕获到了Catch块中。虽然理论上.NET应该包装不从System.Exception派生的异常,但唯一合乎逻辑的答案似乎与Joe的答案一致,即我们所经历的异常不是从System.Exception派生的,因此被视为未处理例外。
粘贴在这里的错误,与堆栈跟踪和所有 – Fredou 2010-01-05 13:40:27
这是很难复制,因为它是通过对呼叫的厂商的侧面的问题引起的,但我会看看我能做些什么。 – Walter 2010-01-05 14:12:37
其中一个组件:CustomClientResponse, VendorResponse或 VendorWebservice 正在抑制该异常,并且不会重新抛出该异常,也不会重新抛出该异常,也不会重新抛出它。 没有这些组件的源代码,或者没有API文档的链接,我们可能无法提供帮助。 – 2010-01-05 16:32:32