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