2

我有一个 .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 秒(花费时间:62743)。通常这需要 14 秒才能完成而不会出现错误。

调用是在单击按钮后在 ASPX 页面后面的代码中进行的。页面上有一个更新面板,按钮用作 PostBackTrigger。

问题:为什么在 Web 服务调用后会出现这些“请求超时”错误?

服务器:

  • 视窗服务器 2008 R2 SP1
  • IIS 7.5
  • 微软网址扫描 3.1
  • Windows 防火墙
4

2 回答 2

2

我终于找到了这个问题的答案。原来是web.config中的这段代码:

<pages smartNavigation="true">

关闭此功能后,我不再收到任何超时错误。超时的原因可能是 IE 浏览器中 smartNavigation 设置生成的 IFRAME(不是在 Firefox/Chrome 中)

我在 .NET 2.0 中使用此设置来消除导航引起的闪烁,升级到 .NET 4.0 后,Visual Studio 没有提供任何线索表明此设置已被弃用。

我找到了答案,因为我还有一个问题要处理。在使用 .NET 4.0 的最新ajaxToolkit后,我​​在使用 AutoCompleteExtender 时在 IE7/8 中遇到了这个 javascript 警报错误:

行堆栈溢出:0

原来这与 smartNavigation 设置有关。因此,删除此设置同时解决了两个问题。希望我能帮助某人,因为对我来说,这是我在互联网短暂的历史中发现的最烦人的错误之一。

于 2013-03-05T15:41:55.700 回答
0

考虑更改 web 服务器的 machine.config 中的 httpRuntime executionTimeout = "xxx" 标签。根据您的情况,默认值可能是两个短。以秒表示的值考虑将其加倍。

于 2012-12-05T03:03:06.023 回答