c# - IIS/SQL Server 连接错误

标签 c# asp.net sql-server-2008 iis

我正在做一个示例代码,我陷入了一个非常奇怪的行为,我正在尝试使用这个连接字符串连接到 SQL Server

"Data Source=" + ServerName + "." + DomainName  + ";Initial Catalog="+DBName+";Integrated Security = false;Persist Security Info=false;User ID=sa;Password=" & Mypassword & ";Connection Timeout=90"

显然我没有使用 Windows 集成身份验证或 (SSPI),当我在 Web 应用程序上使用它时出现此错误:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

请注意,我创建了一个 .Net 应用程序,它使用相同的连接字符串并从 IIS 所在的计算机上运行并且运行良好。

这是我完成的步骤:

  1. 我检查了 SQL 客户端配置并打开它并启用了协议(protocol) tcp 和命名管道。

  2. 我在 IIS 上进行了模拟并使用了 Windows 身份验证,并确保 IIS 使用与我相同的凭据。

  3. 我使用 Wireshark 来查看两个连接之间的区别,但我无法理解输出,但是从 IIS 看来,它总是尝试使用 Windows 身份验证,尽管我已经明确地制作了这样的字符串它基本上不使用 Windows 身份验证,但发生的是连接开始时的一些协商似乎与两个应用程序“not_defined_in_RFC4178@please_ignore”相同,然后 IIS 始终转到 NTLMSSP,注意我的用户无权访问数据库,但通过用户名和密码除外,因此与 IIS 的协商失败,而从应用程序正常协商成功。

我的问题是我该如何解决这个问题,我假设有一些配置要求来自 IIS 的任何 SQL 客户端都使用 Windows 身份验证,但我不知道在哪里或如何禁用它

我注意到我没有为 SQL Server 连接字符串使用 web.config 配置,这个问题发生在 IIS7 上。

最佳答案

以下是我要检查的第一件事:

  1. 验证应用程序池用户是否有权访问网络资源

    • 既然你说它在你登录机器时工作,请尝试将应用程序池用户更改为你登录机器时使用的用户。
  2. 检查您的 web.config 中是否启用了模拟。如果这样做,请确保用户可以访问网络资源。

  3. 尝试更改连接字符串以使用 IP 地址(作为测试)。如果这解决了问题,则可能是某种 DNS 问题。

    • 确保在 IP 地址末尾包含 ,1433
    • 在连接字符串中设置 Network Library=DBMSSOCN。 (有关详细信息,请参阅 ConnectionStrings.com 上的 article。)

关于c# - IIS/SQL Server 连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15613473/

相关文章:

c# - 订购时使用的最佳 list

sql - SELECT 语句检索从未发生过的事情

.net - 将表行从一个表移动到另一个表的最有效方法

c# - 转到 C# 库 | BadImageFormatException异常

c# - 如何使 lambda 在列表列表中的位置?

c# - 事件冒泡和 MVP : ASP. NET

c# - 如何将参数传递给 ASP.NET MVC 2 中的自定义 ActionFilter?

c# - 下拉列表中的第一项根本不会触发 SelectedIndexChanged

SQL Server在update语句中执行存储过程

c# - 如何开始在 C# 中制作音频和视频流应用程序