1

我正在通过 SOAP 调用 Web 服务。当 Web 服务关闭时,我们希望它很快失败,而不是等待默认超时。我为此使用 Timeout 属性:

service.Timeout = 5000;

我认为应该在 5 秒后超时操作。但是,我看到该操作直到 23 秒后才超时,与默认超时时间相同(即上述行不存在)。

我看到抛出的异常是“操作已超时”,我只是不明白为什么它没有在我指定的时间内超时。我究竟做错了什么?

编辑:

这是测试程序:

long start = Environment.TickCount;
try {
  mdDqwsStatus.Service service = new mdDqwsStatus.Service();
  service.Timeout = 5000;                                        // 5 sec
  string response = service.GetServiceStatus(customerID, pafID); // This calls the WS
  long end1 = Environment.TickCount - start;                     // I never hit this line
} catch (Exception ex) {
  long end2 = Environment.TickCount - start;                     // Failure goes to here
  OutputError(Ex);
}

我在 OutputError 行上设置了一个断点,然后查看 end2,看到 23000+ 毫秒。

请注意,在现场,如果 Web 服务(在 IIS 上运行)已停止,则延迟非常短。但是,如果机器出现故障或存在连接问题,则延迟为 23 秒(有时甚至更长)。

4

0 回答 0