繁体   English   中英

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

[英]ASP.NET SqlException when publishing in IIS Web Server

我刚刚开始在Visual Studio 2015和SQL Server 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和端口而不是该名称,但我不确定,因为我没有这方面的经验。

您是对的:您应该在连接字符串中使用服务器名称和/或IP。

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

  • Web.config文件
  • WebServer.config

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

另外值得注意的是:您没有在连接字符串中包含凭据,这意味着您在连接到SQL Server时使用的是Windows身份验证。 通过visual studio进行调试时,应用程序将像您一样运行 - 如果您具有所需的权限,它将起作用。 但是,当在IIS中运行时,它不会像你一样运行(至少,它不应该) - 所以你也可能遇到问题。

编辑

此链接可能对您有用: 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 Server实例的权限。 也就是说,我建议您使用SQL帐户而不是Windows身份验证。

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

希望这可以帮助

连接字符串有两个问题:

“集成安全性”表示您使用本机Windows系统进行身份验证。 与使用Windows密码在数据库上打开SSMS类似。 IIS现在正在尝试连接到数据库,连接字符串告诉您使用IIS运行的进程。

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

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

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

然后,我安装了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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM