ASP.NET 在 IIS Web 服务器中发布时出现 SqlException

ASP.NET SqlException when publishing in IIS Web Server

我刚刚开始在 Visual Studio 2015 和 SQL 服务器 2014 中开发 ASP.NET Web 应用程序。在某个地方,我需要连接到我的本地数据库并使用它:

ConnStr = "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=my_db;Integrated Security=True";

当我在浏览器中通过 VS 运行 应用程序时,它工作正常。我可以访问数据库并做任何我想做的事。但是,当我在 IIS Web 服务器中发布我的应用程序,然后在浏览器中打开它时,它仍然可以正常工作,直到我必须访问数据库。在那一刻它抛出 SqlException:

System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible.

可能是服务器名称问题,我应该使用 IP 和端口而不是那个名称,但我不确定,因为我没有这方面的经验。

你是对的:你应该在连接字符串中使用服务器名称 and/or IP。

使用 "local" 或 "localhost" 之类的东西意味着您的代码不可移植。另一种选择是将连接字符串存储在两个单独的配置文件中——一个用于本地副本(用于开发和故障排除),一个用于服务器(用于可移植性)。我的解决方案中有两个配置文件:

  • Web.config
  • WebServer.config

然后,当我部署到服务器时,我只是删除 Web.config 并将 WebServer.config 重命名为 Web.config。它完全便携,您再也不会遇到连接字符串问题!

另请注意:您没有在连接字符串中包含凭据,这意味着您在连接到 SQL 服务器时使用了 windows 身份验证。当通过 visual studio 调试时,应用程序会像您一样 运行 - 如果您拥有所需的权限,它就会工作。但是,当在 IIS 中 运行ning 时,它不会像你那样 运行ning(至少,它不应该) - 所以你也可以 运行 解决那里的问题.

编辑

这篇 link 可能对您有用:https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx

您的连接字符串应如下所示:

Data Source=192.168.1.10,1433;Initial Catalog=YourDatabaseName;User ID=SqlUserName;Password=SqlPassword;Connection Timeout=60; Max Pool Size=3000; 

(您可以将最大池大小和连接超时设置为任何您想要的 - 或者完全忽略它们。

此外,关于您的 windows 问题 - 您需要确保 IIS 使用的 windows 帐户有权遍历您的网络并访问您的 SQL 服务器实例。也就是说,我建议您使用 SQL 帐户而不是 windows 身份验证。

由于您在连接字符串中使用了集成安全性,因此您必须修改您的应用程序所在的应用程序池的标识 运行。 身份将是您的 windows 用户名和密码。 要更改用户名和密码,您需要进入应用程序池和进程模型的高级设置,您可以看到身份,您可以在其中添加您的 windows 凭据

希望对您有所帮助

你的连接字符串有两个问题:

"Integrated Security" 表示您正在使用本机 windows 系统进行身份验证。类似于使用 Windows 密码在数据库上打开 SSMS。 IIS 现在正在尝试连接到数据库,并且连接字符串告诉您使用 IIS 运行ning 下的进程。

您可以在 SQL 服务器中创建一个非 windows 用户,并将凭据放入连接字符串中。或者您可以授予 IIS 用户数据库权限。或者你可以在这里做很多不同的事情,但这些是最容易让你感动的。

连接字符串中的第二个问题是数据源。你的本地机器上有 SQL 服务器吗?如果是这样,那就是它不起作用的原因。尝试在 VS 中 运行 您的应用程序,但针对远程 SQL 服务器。那应该是你的下一步。

问题是我认为 SQL 服务器是用 VS 或至少用 SQL Server Management Studio 自动安装的。但不是。因此,据我所知,我还没有使用过真正的 SQL 服务器。当我检查 SQL 服务器配置管理器时, SQL 服务器服务中没有 运行 任何东西,所以我意识到我遗漏了一些东西。

然后,我安装了 SQL Server Express 并在那里构建了我的数据库。现在即使我发布它也能正常工作。连接字符串是

Data Source=.\SQLEXPRESS;Initial Catalog=my_db;User ID=username;Password=pass

也可以是:

Data Source=localhost\SQLEXPRESS;Initial Catalog=my_db;User ID=username;Password=pass