连接字符串因网络名称超时,但适用于 IP
Connection String times out with network name, yet works with IP
机器 1
- Windows 服务器 2008
- SQL 服务器 2008
数据库。包含我们网站使用的所有信息。
机器 2
- Windows 服务器 2012
- IIS 8
网络服务器。使用 IIS 托管两个站点:
- 生产站点:(默认)具有最新的UI和功能
- 备份站点:旧UI,但仍在使用机器 1
的最新数据
工作原理如下:
- 用户转到机器 2 上托管的站点之一并输入他们的公司信息
- 机器 1 查询该公司的连接字符串。
- 站点使用连接字符串连接到机器 1 上的正确数据库。
问题是大约 1/3 的连接字符串使用网络名称(例如 "Data Source='Machine1';"),而另外 2/3 使用 IP 地址(例如 "Data Source=192.168.1.200;")。通过生产站点连接时,如果使用带有网络名称的连接字符串,则会发生超时。但是,如果同一用户使用相同的凭据登录备份站点,则无论使用哪个 'Data Source',一切都正常。
我创建了一个简单的 Powershell 脚本来测试机器 2 的连接;网络名称和 IP 地址都有效,这让我怀疑这是一个 IIS 或 web.config 问题。我对两者都进行了广泛的研究,这些是我注意到的唯一区别:
- IIS 中的不同应用程序池:然而,当我 运行 "Get-CimInstance Win32_Process" 它显示 w3wp.exe 的两个实例已启动相同命令和参数(不同的管道除外)
- 略有不同web.config。备份站点有一个完全独立的 web.config,而生产站点存储其连接字符串是一个单独的文件。
几天来我一直在努力反对这个问题。考虑到这是一个生产网站,我可以采取的步骤非常有限,并且
数据库。任何建议表示赞赏。
尝试将网络库放在连接字符串中以强制使用 tcp。
参见 connectionstrings.com/define-sql-server-network-protocol
;网络库=DBMSSOCN;
PS
是的。去过也做过。 4 天的 "on site" 客户访问......这就是协议......因此我学会了如何通过连接字符串强制它。你也可以试试这个:
创建一个(临时的)系统 DSN(控制面板中的 ODBC),名字很奇怪,比如 "peanutbutter"。某处有一个客户端连接按钮。强制它到 tcp。然后在您的注册表中搜索花生酱并找出网络库的存储方式。
一图胜千言。请参见下图的左侧。 (来自旧互联网的随机图像)
机器 1
- Windows 服务器 2008
- SQL 服务器 2008
数据库。包含我们网站使用的所有信息。
机器 2
- Windows 服务器 2012
- IIS 8
网络服务器。使用 IIS 托管两个站点:
- 生产站点:(默认)具有最新的UI和功能
- 备份站点:旧UI,但仍在使用机器 1 的最新数据
工作原理如下:
- 用户转到机器 2 上托管的站点之一并输入他们的公司信息
- 机器 1 查询该公司的连接字符串。
- 站点使用连接字符串连接到机器 1 上的正确数据库。
问题是大约 1/3 的连接字符串使用网络名称(例如 "Data Source='Machine1';"),而另外 2/3 使用 IP 地址(例如 "Data Source=192.168.1.200;")。通过生产站点连接时,如果使用带有网络名称的连接字符串,则会发生超时。但是,如果同一用户使用相同的凭据登录备份站点,则无论使用哪个 'Data Source',一切都正常。
我创建了一个简单的 Powershell 脚本来测试机器 2 的连接;网络名称和 IP 地址都有效,这让我怀疑这是一个 IIS 或 web.config 问题。我对两者都进行了广泛的研究,这些是我注意到的唯一区别:
- IIS 中的不同应用程序池:然而,当我 运行 "Get-CimInstance Win32_Process" 它显示 w3wp.exe 的两个实例已启动相同命令和参数(不同的管道除外)
- 略有不同web.config。备份站点有一个完全独立的 web.config,而生产站点存储其连接字符串是一个单独的文件。
几天来我一直在努力反对这个问题。考虑到这是一个生产网站,我可以采取的步骤非常有限,并且 数据库。任何建议表示赞赏。
尝试将网络库放在连接字符串中以强制使用 tcp。
参见 connectionstrings.com/define-sql-server-network-protocol
;网络库=DBMSSOCN;
PS
是的。去过也做过。 4 天的 "on site" 客户访问......这就是协议......因此我学会了如何通过连接字符串强制它。你也可以试试这个:
创建一个(临时的)系统 DSN(控制面板中的 ODBC),名字很奇怪,比如 "peanutbutter"。某处有一个客户端连接按钮。强制它到 tcp。然后在您的注册表中搜索花生酱并找出网络库的存储方式。
一图胜千言。请参见下图的左侧。 (来自旧互联网的随机图像)