asp-classic – Classic ASP中的Response.Flush导致TIME_WAIT端
我最近意识到这个问题:
https://blogs.msdn.microsoft.com/spike/2008/09/17/nested-recordset-and-the-portsocket-in-time_wait-problem-by-example/ 如果你打开一个记录集,然后在记录集仍然打开的情况下使用连接进行其他操作,则Web服务器会打开一个新端口与数据库通信,然后立即将该端口置于TIME_WAIT状态. 我一直在浏览网站来解决这个问题(通过在重新使用连接之前关闭记录集 – 它可以工作)但是注意到一些奇怪的事情. 当页面上有“Response.Flush”时,无论你做什么,它都会导致使用额外的端口,然后进入无用的TIME_WAIT状态.这可能导致严重的港口用尽情况. 示例代码: <%@ Language=VBScript %> <html> <head> </head> <body> <% response.flush set cnn = server.CreateObject("adodb.connection") CNN.cursorlocation=3 cnn.open [YOUR CONNECTION STRING] set rs=server.createobject("adodb.recordset") set rs=cnn.execute("select top 1 * from [YOUR TABLE]") cnn.close set cnn=nothing %> </body> </html> 要检查等待时间,您可以运行: netstat -nao | find /i "[YOUR DB IP]" /c 通过Web服务器上的命令提示符.假设这是一个测试系统,您应该立即看到从Web服务器到数据库服务器的time_wait连接弹出窗口.删除同花顺,然后停止. 谷歌搜索没有帮助 – 对任何建议开放. 环境:IIS 7.5,经典ASP,SQL Server 2008. 编辑: 我也根据评论尝试了这个: Set cmd = Server.CreateObject("ADODB.Command") With cmd 'No need to handle connection let ADODB.Command create and destory it. .ActiveConnection = sqlcnnstr1 .CommandType = 1 .CommandText = "select top 1 * from [YOUR_TABLE]" Set rs = .Execute() If Not rs.EOF Then data = rs.GetRows() Call rs.Close() Set rs = Nothing End with Set cmd = Nothing 还是同样的问题.具有齐平,额外连接,无需相同连接. 编辑2 现在问题变成了你可以逃脱没有response.flush产生从IIS到客户端的额外连接. 解决方法
原来TIME_WAIT连接零与数据库有关,只是有一个response.flush打开一个从Web服务器到客户端的新连接,这就是导致TIME_WAIT连接的连接.我没有找到解决办法,因此我只是限制响应.特殊情况下的冲洗,否则不会冲洗.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – ASP.NET MVC 4移动显示模式停止工作
- asp.net-core – 找不到Swashbuckle.AspNetCore SwaggerOpe
- asp.net-mvc – 为什么Chrome在这两种情况下使用不同的客户
- asp.net-mvc – 将ExtJs 4网格过滤器信息绑定到asp.net mvc
- asp.net – 确定当前页面是否需要授权?
- asp.net-mvc-3 – ASP.NET MVC 3 JSONP:这适用于JsonValue
- asp.net – 在PreRender上添加控件页面
- 单元测试 – 单元测试项目不能参考MVC项目
- 处理ASP.Net MVC中的过期标题
- asp.net-mvc – 为什么要使用MVC帖子注销?