我正在通过 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 秒(有时甚至更长)。