1

我们的系统结合使用 VB6 旧应用程序和较新的 .NET 应用程序。应用程序部署到我们的客户端,它们从终端服务器盒运行应用程序,SQL Server 数据库在不同的盒中运行。

VB6 应用程序工作正常,而所有 .NET 应用程序在每次启动时都会失败(尝试连接到数据库以读取配置信息)并出现错误:

System.Data.SqlClient.SqlException:建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供者:TCP Provider,错误:0 - 连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。)

真正奇怪的是:我在 C# 中创建了一个测试 .NET 应用程序,它复制了 .NET 应用程序使用的确切连接字符串——我部署了一个显示实际使用的连接字符串的应用程序的检测版本——以及测试应用程序工作

VB6 连接字符串(有效):Provider=SQLOLEDB;Data Source=servername;Initial Catalog=databasename;User ID=username;Password=password;

.NET 连接字符串(有效和无效):Data Source=servername;Initial Catalog=databasename;User ID=username;Password=password;Application Name="ourappname"

我们的其他客户都没有使用相同的二进制文件遇到过这个问题,这告诉我这是 .NET 应用程序如何与这个特定客户的系统交互的问题。

我应该采取哪些步骤来解决/解决此问题?在这一点上,我真的很茫然。我希望其他人以前见过这个问题;我在 Google 上找不到任何相关内容。


  • 两个盒子都是在 VMWare 上运行的 Windows Server 2008 R2 SP1,并且在同一个域中
  • 两个盒子都运行 ESET NOD32;禁用并没有改变任何东西
  • SQL Server 是 2008 R2 RTM 的默认实例(同一个盒子上还有 2008 和 2008 R2 命名实例)
  • 应用程序(和我的测试应用程序)是 .NET 4.0
  • 应用程序使用 SQL 登录进行身份验证(是的,我检查了失败的应用程序使用的密码是否正确)
  • 一些 .NET 应用程序使用不同的代码来执行应用程序启动,但它们都表现出相同的错误
  • .NET 应用程序有些是 C#,有些是 VB,有些是混合的(VB 应用程序、C# 核心程序集)
  • 我尝试修复 .NET 4.0 安装
  • 我试过重新启动两个盒子
  • 我已经尝试部署源二进制文件,以便绕过我们的部署子系统(以防它导致某种损坏)
  • 我在本地编译的检测应用程序与通过 Team System 构建的原始应用程序具有相同的行为
4

1 回答 1

3

我发现这种行为通常有几个主要原因:

  1. SQL Server 未配置为侦听特定连接类型。要确定这一点,请在 SQL 机器上打开 SQL Server 配置管理器,单击 SQL Server 网络配置,然后单击 MSSQLServer 协议。验证 TCP/IP 是否已启用。

  2. SQL Server 不允许远程连接(如果其他应用程序正在连接,那么这显然不是问题)。

  3. 客户端计算机未配置为使用 SQL Server 支持的协议与 SQL Server 通信,或者客户端计算机输入了错误的配置信息。要验证这一点,请从 Run... 提示符运行 cliconfg 并确保启用了适当的协议,并且在 Alias 选项卡中没有任何冲突的别名。我通常会专门为连接字符串中配置的机器名称添加一个,并带有适当的 IP 地址,以防出现 DNS 问题(至少用于测试)。

  4. 由于 VB6 客户端可以工作,而 .Net 客户端则不存在 64 位与 32 位访问的问题。如果您的应用程序是为 64 位或任何 CPU 编译的,您可以尝试 32 位构建以查看是否可以解决访问问题。如果是这样,那么这很可能是 64 位 SQL 客户端配置问题。

于 2012-08-07T20:08:47.980 回答