簡體   English   中英

無法使用SQL身份驗證從IIS托管應用程序連接到SQL Server數據庫

[英]Unable to connect to SQL Server database from IIS hosted application using SQL authentication

我一直在使用Entity Framework 6.0為后端連接開發VS 2012中的應用程序。 我建立了到SQL Server 2008數據庫的連接,並成功配置了Entity Framework模型(首先是數據庫),沒有出現問題。 但是,當我嘗試在IIS中運行應用程序時連接到數據庫時,始終出現異常。

異常有幾層,但是最里面的異常顯示為:

連接嘗試失敗,因為一段時間后連接方未正確響應,或者建立連接失敗,因為連接的主機未能響應

我曾嘗試將連接超時延長到60,但這並沒有影響,通過其他方式進行連接也不會花很長時間,因此我認為這與超時無關。 調用應用程序是一個Web API項目,位於本地IIS中,我已將確切的連接字符串從我的EF模型項目復制到了該項目中的web.config文件中,如下所示:

<add name="ConnectionName" 
     connectionString="metadata=res://*/ModelName.csdl|res://*/ModelName.ssdl|res://*/ModelName.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=server,portnumber;initial catalog=dbname;persist security info=True;user id=user;password=password;MultipleActiveResultSets=True;&quot;" 
     providerName="System.Data.EntityClient" />

我已經通過SQL Server Management Studio使用標准的SQL Client連接(不是從IIS應用程序)成功連接到此連接,甚至在本地測試時甚至使用相同的EF連接字符串,但是由於某些原因,我無法通過該應用程序在IIS中托管時的代碼。 我可以確認DbContext類在調試時正在使用適當的連接信息。

更新:我發現該問題並非特定於實體框架。 當我也使用SQL客戶端進行測試時,就會發生此問題。 但是,IIS中托管的每個應用程序都會發生這種情況,而不僅僅是我的Web API應用程序。 但是,仍然無法確切地找出問題所在。

在此連接字符串中,SQL Server稱為server ,端口號為portnumber 顯然,通過SSMS連接時您沒有使用此功能。 為什么不更改此連接字符串以匹配SSMS中的任何有效內容。

它可能至少應該是localhost而不是server

connectionString="
metadata=res://*/ModelName.csdl|
res://*/ModelName.ssdl|
res://*/ModelName.msl;
provider=System.Data.SqlClient;
provider connection string=&quot;
    data source=localhost;initial catalog=dbname;
persist security info=True;
user id=user;
password=password;
MultipleActiveResultSets=True;&quot;"

(回車只是為了清楚起見)

我發現了發生這種情況的原因。 在IIS中,我必須為應用程序啟用Windows身份驗證並禁用匿名身份驗證。 我不確定為什么不通過Windows身份驗證就無法使用SQL身份驗證連接到SQL Server,但這是允許我通過IIS連接的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM