WebClientProtocol超时发生时会发生什么

时间:2008-12-12 06:34:13

标签: c# .net web-services timeout

我们有一个引用web服务的客户端应用程序。我们已经将webclientprotocol对象的超时属性设置为50(ms),并希望观察发生了什么。我们绑定了一个长期运行的webmethod,它将一个巨大的DataSet返回给客户端。当存在默认值时,DataSet已正确返回给客户端。当我们将其改为50(ms)时,我们没有观察到任何事情。我们的假设是,自发生超时以来,客户端会发生某种异常。任何人都可以解释这里发生了什么

由于 拉吉

2 个答案:

答案 0 :(得分:4)

遗憾的是,文档不清楚。当你说“没有观察到任何东西”时,你究竟是什么意思?代码是否永远挂起?抛出异常?没有返回有效数据集的Presuma。

我会期待一个TimeoutException被抛出,但我很惊讶在你的客户端代码中并不完全明显。你没有吞咽异常,是吗?

您是同步还是异步执行呼叫?如果它是异步的,我希望执行回调,然后在“EndXxx”调用上抛出异常。

我强烈建议您编写一个简短的控制台应用程序,只是调用Web服务,只是为了看看会发生什么。

答案 1 :(得分:0)

我刚碰到这个。在.NET 2.0 Web服务中,它会抛出一个非常不明确的WebException,只有Message属性来区分它:

  

请求已中止:连接意外关闭。

我没有在较新版本的Visual Studio中默认生成的基于WCF的服务引用中尝试过它,但如果我正确理解this,它们会抛出一个更有用的TimeoutException,就像Jon Skeet一样,我猜想(并且更愿意)成为Web服务中的行为。

请注意,超时仅适用于同步调用(至少在Web服务中;我认为对于WCF服务引用也是如此)。如果您希望异步调用超时,则必须设置计时器并手动中止调用,例如演示here