我在.NET 4.0集成模式下有一个Web应用程序,通过localhost在同一服务器上调用.NET 2.0集成模式下的Web服务(ASMX)。
10次中有9次都可以正常工作,但有时Web应用程序会在通话过程中出现“请求超时”和“线程被中止”错误。它在此代码示例的最后一行给出了错误:
Dim Service As New localhost.Service
Dim Input As New localhost.InputProduct
Dim Ret As New localhost.OutputProduct
Try
Ret = Service.RequestProduct(Input)
Catch
Finally
Service.Dispose()
If Ret.succesfull = True Then
If Response.IsClientConnected = True Then
Response.Redirect("success.aspx", False)
End If
End If
End Try
在Web服务的日志文件中,我得到一个sc-win32-status:995和一个sc-status:200,通常所用的时间总是超过60秒(time-take:62743) 。通常这需要14秒才能完成而没有错误。
单击按钮后,在ASPX页面后面的代码中进行调用。 在页面上有一个Updatepanel,该按钮用作PostBackTrigger。
问题:为什么在Web服务调用后会出现这些“请求超时”错误?
服务器:
答案 0 :(得分:2)
我终于找到了这个问题的答案。原来这是web.config中的这段代码:
<pages smartNavigation="true">
关闭此功能后,我再也没有收到任何超时错误。 超时的原因可能是smartNavigation设置在IE浏览器中生成的IFRAME(不在Firefox / Chrome中)
我已经在.NET 2.0中将此设置用于eliminating the flash caused by navigation,在升级到.NET 4.0之后,Visual Studio并未提供任何关于此设置已被弃用的线索。
我找到了答案,因为我还有其他问题要处理。使用最新的ajaxToolkit for .NET 4.0后,在使用AutoCompleteExtender时IE7 / 8中出现此javascript警告错误:
堆栈溢出:0
结果与smartNavigation设置有关。因此,删除此设置会立即解决两个问题。希望我能帮助这个人,因为对我而言,这是我在短暂的互联网历史中发现的最烦人的错误之一。
答案 1 :(得分:0)
考虑更改位于web服务器的machine.config中的httpRuntime executionTimeout =“xxx”标记。默认情况可能是您的情况的两个简称。以秒表示的值考虑加倍。