我有一个 Web 项目(C# Asp.Net、EF 4、MS SQL 2008 和 IIS 7),我需要在本地将它迁移到 IIS 7(目前与 CASSINI 配合得很好)。
在 IIS 本地,我有我Default Web Site的部署。我的部署和Default Web Site池 ASP.NET v4.0(查看图像以获取设置)池目标 Framework 4 作为我的 Web 项目。 访问该站点时,浏览器不显示该页面,而是允许浏览器下载该页面。
Default Web Site
我有其他项目在本地运行在 IIS 上,它们可以正常工作(但它们不使用实体框架)。
使用事件记录器我看到如下错误:
Exception information: Exception type: EntityException Exception message: The underlying provider failed on Open. at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure) Login failed for user 'IIS APPPOOL\ASP.NET v4.0'. at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.SqlClient.SqlConnection.Open() at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure)
更新:您可以在有关此问题的资源中阅读,必须在 MS SQL 2008 上手动授予权限,如 arift 在他的回答中解释的那样。使用 IIS 7.5 和 MS SQL 2008 R2,不需要手动设置权限。
看起来它试图打开与 SQL Server 的连接失败。
您需要为 SQL Server 添加登录名IIS APPPOOL\ASP.NET v4.0并授予对数据库的权限。
IIS APPPOOL\ASP.NET v4.0
在 SSMS 中,在服务器下,展开 Security,然后右键单击 Logins 并选择“New Login…”。
在 New Login 对话框中,输入应用程序池作为登录名,然后单击“OK”。
然后,您可以右键单击应用程序池的登录名,选择属性并选择“用户映射”。检查适当的数据库和适当的角色。我认为您可以只选择db_datareaderand db_datawriter,但如果您通过 EF 执行此操作,我认为您仍然需要授予执行存储过程的权限。您可以在此处查看角色的详细信息。
db_datareader
db_datawriter