【发布时间】:2016-05-19 16:10:55
【问题描述】:
我有两台 Windows Server 2012 机器。它们都是我创建的域的一部分。一个是 Web 服务器,另一个是托管 SQL Server 2012 的数据库服务器。从 Web 服务器,我可以使用 MSSMS 建立与数据库服务器的连接,但从我编写的托管在 IIS 中的应用程序,我无法建立连接。我收到以下错误:
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: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)
我已验证 SQL Server 允许远程连接。
我已验证它使用的是 TCP/IP 协议。
我已尝试完全限定 SQL Server 计算机名称以包含 name.domain.com。
我可以毫无问题地 ping SQL Server。
正如我已经说过的,我可以使用机器名和 IP 地址从 MSSMS 建立连接,没有问题。
此时我已关闭两台机器上的 Windows 防火墙,并添加了打开以下端口的规则:
TPC/IP - 135、1433、1434、2382、2383、4022
UDP - 1434
为了以防万一,我什至向公众开放了端口。
在我的应用程序中,我有一个提供连接信息的静态类。它看起来像这样:
static public class _ConnectionData
{
public static string Source = "192.168.0.33"
public static string Catalog = "dbCat";
public static string User = "dbCatUser";
public static string Password = "**********";
public static string ConnectString
{
get { return "Data Source=" + Source + "; Integrated Security=false; Initial Catalog=" + Catalog + "; User ID=" + User + "; Password=" + Password; }
}
}
我在 IIS 中设置了我的虚拟目录,方法是复制 inetpub\wwwroot 下的应用程序目录,然后在 IIS 管理员中将其转换为应用程序。
我现在不知所措。为了从 IIS 托管应用程序中获得连接,我需要做些什么特别的事情吗?我需要指定提供程序作为连接字符串的一部分吗? IIS 中是否有需要设置的特殊权限?我的 appPool 设置为集成,对吗?
我已经秃了,所以在这一点上我不确定我会拔出什么,也许是腋毛。
【问题讨论】:
-
从 IIS 外部尝试您的确切代码 - 例如控制台应用程序 - 可以吗? (而不是使用 SSMS)。如果是这样,那么您的 IIS 安全性(例如应用程序池帐户)可能会受到限制到达 DB svr。
-
嗨 pachy,我第一个调用应用程序的端口是从字符串中取出“Integrated Security”。如果您传递的是用户名和密码组合,则不需要。接下来,正如 Murray 所说(击败我片刻),我将尝试使用控制台应用程序连接,甚至使用 powershell 确保连接字符串相同。
-
您是连接到默认实例还是命名实例?从 IP 地址更改为主机名有帮助吗?
-
我会把代码放到控制台应用程序中,现在就试试。我已经尝试了没有集成安全标志的连接字符串,但这没有任何区别。我正在连接到 SQL Server 上的默认实例。我也尝试将 MSSQLSERVER 作为实例,但它什么也没做。我已经尝试了 IP 和主机名,没有任何区别。现在编写控制台应用程序。
-
控制台应用程序像冠军一样工作。那么你们会为应用池帐户查看哪些权限?
标签: c# asp.net sql-server iis