簡體   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