IIS/SQL服务器连接错误
我做的一个示例代码和我得到了一个非常奇怪的行为stucked,我想用我不使用此连接字符串IIS/SQL服务器连接错误
"Data Source=" + ServerName + "." + DomainName + ";Initial Catalog="+DBName+";Integrated Security = false;Persist Security Info=false;User ID=sa;Password=" & Mypassword & ";Connection Timeout=90"
显然连接到SQL Server 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驻留并且工作正常。
下面是我做的步骤:
我检查了SQL客户端配置我打开了它,并同时启用了TCP协议和命名管道。
我在IIS上进行了模拟,并使用了Windows身份验证,并确保IIS使用与我的凭据相同的凭据。
我使用Wireshark来查看wut是两个连接之间的差异,我无法理解输出,但它似乎从IIS始终尝试使用Windows身份验证,虽然我已明确地使字符串不使用Windows身份验证基本上发生的情况是,在应用程序“not_defined_in_RFC4178 @ please_ignore”中似乎相同的连接开始时的一些协商,然后IIS始终向NTLMSSP发出通知,指出我的用户无权访问数据库除了通过用户名和密码外,所以协商失败与IIS通常从应用程序成功。
我的问题是,请问有什么可以解决这个问题,我有种假设有一些配置,必须经历从IIS任何SQL客户端使用Windows身份验证,但我不知道在哪里或如何禁用它
我注意到我没有为SQL Server连接字符串使用web.config
配置,并且这个问题发生在IIS7中。
检查ServerName,DomainName,DBName的值& MyPassword。 他们是否正确? 他们如何填充?
他们是正确的我检查了他们 – 2013-03-25 11:25:36
这里是第一件事情我会检查:
-
验证应用程序池用户有权既然你说,它的工作原理,当你登录到本机访问网络资源
- ,尝试将应用程序池用户更改为登录到计算机的用户。
检查您的web.config中是否启用了模拟。如果这样做,请确保用户可以访问网络资源。
-
尝试更改连接字符串以使用IP地址(作为测试)。如果解决了这个问题,也许这是某种DNS问题。
- 请务必包括,1433在IP地址
- 集
Network Library=DBMSSOCN
的连接字符串的结尾。 (更多信息请参阅本article上ConnectionStrings.com。)
我如何检查1和2? 对于3,在我的情况下,使用IP地址仍然会引发相同的错误,但添加1433端口会将错误更改为“TCP提供程序,错误:0-由于目标计算机主动拒绝而无法建立连接”尽管这是SQL Server使用的正确的tcp端口号。 – 2013-05-25 13:59:37
更新:*我* WebService和WinForms应用程序获得“积极拒绝它”错误0如果我添加“,1433”。我上面说过端口是正确的,因为用“netstat -ano | findstr 1433”检查目标机器会显示sqlservr.exe的pid。至于#2,我使用了IIS身份验证功能,并将“ASP.NET模拟”显示为禁用。 – 2013-05-25 14:17:42
尝试SQL服务器计算机上的相同连接字符串。还要确保防火墙允许1433入站SQL服务器计算机上。 – 2013-05-26 12:18:13
如果您键入如上确切的连接字符串,请改变&在连接字符串周围密码到+。
上面写的连接字符串是无效的字符串,因为在所有的字符串可以串联使用+在C#中不使用&我所知另一个字符串。
+1:good抓住。这可能只是一个剪贴错误的错字。 – RBarryYoung 2013-05-29 14:12:37
这是一个值得关注的问题,但并不影响核心问题:完整的连接字符串在Web应用程序/ Web服务和.NET(表单)应用程序中都是相同的,前者会为其提出错误,后者将工作得很好。 – 2013-05-29 15:10:25
对于任何给这个“答案”+1的人:你真的相信这样的错字会产生“在建立到SQL Server的连接时发生的网络相关或实例特定的错误。服务器未找到或无法访问。 [(]提供程序:命名管道提供程序,错误:40 - 无法打开连接到SQL Server)“,而不是语法错误?!? – 2013-05-31 12:14:38
除了别人指出的之外,我唯一一次回忆“命名管道”参考的错误消息是基于如何设置SQL-Server。
为了确认,我进入了我的SQL Server配置管理器版本。然后,查看 “SQL Native Client 11.0配置”(以防万一,32位和64位)并打开以显示“客户端协议”。其中显示共享内存,TCP/IP和命名管道的选项。确保您的“命名管道”协议已启用。
在我的情况下,它已启用。也许你错过了“.Net *应用程序*,它使用来自IIS所在计算机的相同连接字符串[...]正常工作。”部分? – 2013-05-29 13:50:28
臭名昭着的“命名管道”部分错误信息几乎都是红鲱鱼。看到我上面的评论。 – RBarryYoung 2013-05-29 14:10:16
您提到SQL Server在另一台机器上。您应该确保该机器上的SQL Server Browser服务正在运行。
您可以在Windows服务管理控制台(以及其他位置)找到它。
此外,您必须确保防火墙中的UDP端口1434已打开。
就我而言,它正在运行。也许你错过了“.Net *应用程序*,它使用来自IIS所在计算机的相同连接字符串[...]正常工作。”部分? – 2013-05-29 13:51:09
@ C.B。 - 我没有看到任何说.NET应用程序和SQL在独立机器上的东西。在应用程序和SQL位于同一台计算机上的情况下,本地计算机应用程序可能会工作。但是,外部应用程序可能不会。 (请参阅我的有关打开防火墙的更新。) – 2013-05-29 14:12:10
嗯,工作。NET应用程序与IIS在同一台计算机上,并且IIS与SQL Server位于不同的计算机上......这是不是足够的信息? – 2013-05-29 14:42:40
先做检查:
确保您的SQL Server接受远程连接
SQL Server实例 - > Properities- - >连接 - >允许遥远而明亮的连接。
以下这个步骤在第二:
尝试建立在VS与服务器管理器面板的连接:
1)打开服务器浏览器。
2)右键单击“数据连接”,选择“添加连接”
3)在随后的对话框中,选择您的数据源和数据库,指定安全信息,并按下“测试连接”按钮。
4)当连接成功后,按“OK”
5)突出显示服务器资源管理器窗格中的数据库,并期待在属性面板。将显示一个连接字符串的工作示例,您可以将其复制并粘贴到您的应用或配置文件中。
1:允许远程连接。 2:VS生成的连接字符串和我正在使用的连接字符串之间的唯一区别是额外的“Persist Security Info = True”。虽然没有帮助,但我仍然得到“建立到SQL Server的连接时发生了与网络相关或特定于实例的错误。服务器未找到或无法访问。请确认实例名称是否正确,并且SQL Server是配置为允许远程连接(提供程序:命名管道提供程序,错误:40 - 无法打开与SQL Server的连接)“。 – 2013-05-30 11:22:57
@ C.B。 - 当你在Visual Studio中测试连接时,这个问题还不清楚 - 是否工作或者没有? – mikey 2013-06-01 13:24:25
@密钥:它的工作,但我已经清楚,连接字符串本身是好的,因为它在测试应用程序中工作。顺便说一下,为什么不添加自己的答案,以便在一个地方提供所有有用的链接? ;-) – 2013-06-01 13:45:52
可能是SQL服务器没有被客户端系统
确认,因为发生因SQL Server的网络错误不可用,也可能是网络故障某些错误
嗯...没有。也许你错过了“.Net *应用程序*,它使用来自IIS所在计算机的相同连接字符串[...]正常工作。”部分? – 2013-05-31 12:12:01
让我们检查到的步骤解决这个错误。
1)SQL Server应该启动并运行。 2)在SQL Server配置 3)防火墙 4打开端口在Windows)启用TCP/IP启用远程连接 5)启用SQL Server Browser服务 6)防火墙 创建sqlbrowser.exe的例外7)重新创建别名
希望它可以帮助
如何是服务器名称,域名,数据库名设置的值是多少?他们是否正确? – Netricity 2013-03-25 11:18:01
是这样的,它在其他常规应用程序中使用相同的确切值。这是第一件事经历了我的想法 – 2013-03-25 11:24:27
我非常确定这不是,但是您是否试图从'='附近删除空格,在集成安全性= false – LukeP 2013-03-25 11:46:41