我公司刚刚开始在 Windows 2008 R2 服务器上使用 TMG 2010 作为防火墙/Web 代理。自迁移以来,与 SQL Server 的所有连接都会在大约 30 秒后关闭。
例如:
- 从 SSMS 运行查询,该查询将成功运行
- 等待 30 秒以上
再次运行查询,它将失败并出现以下错误
A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.
- 再次运行查询,它将正常工作。
运行时间超过 30 秒的查询也会出现同样的问题。
我假设步骤 3 中的错误是因为 SSMS 没有意识到现有连接已关闭。
查看 TMG 日志,我可以看到 SQL 连接已关闭,并显示以下信息:
Closed Connection
Log type: Firewall service
Status: Unspecified error
Rule: Internal Internet Access
Source: Internal (xx.xx.xx.xx)
Destination: External (xx.xx.xx.xx:1433)
Protocol: Microsoft SQL (TCP)
The result code is: 0x80004005
背景信息:我正在尝试连接到 SQL Azure。但是,我已将笔记本电脑直接连接到交换机(绕过 TMG),并且可以毫无问题地连接到同一个 SQL Azure 实例。基于此,我认为问题不在于 SQL Azure 或 TMG 上游的任何内容。
我发现一些文章指责 TCP Chimney 设置,但这似乎适用于 Windows Server 2003,而且无论如何我尝试禁用它但没有成功。
任何帮助都将不胜感激。
编辑:事实证明 TMG 已经过时了,我已将其升级到 SP2,但问题仍然存在。
编辑:我在 Web 代理设置下发现了最大连接超时,当前设置为 1800 秒。我甚至不确定 Web 代理是否与超过 1433 的 SQL 连接相关,但由于我没有什么主意,我完全禁用了代理。不幸的是,这没有帮助。
是否有其他我遗漏的空闲 TCP 超时位置?
答案1
我最终在 Microsoft 支持的帮助下解决了这个问题。看来,虽然 TMG 服务器正在从 SSMS 接收保持活动数据包,但 TMG 并未将这些数据包转发到 SQL Azure。
我已撰写了一篇博客文章,其中详细介绍了该问题,并附上了微软给我运行的 vb 脚本。
http://www.danrowlands.co.uk/2012/03/sql-connections-timing-out-with-tmg.html