我正在研究“Windows Communication Foundation 4 Step by Step”中的一些WCF示例。只要服务托管在casini中,我生成的应用程序就可以正常运行。将服务部署到本地IIS时失败。部署到IIS时,我可以浏览到IE中的svc页面。这很有效。
根据第41页的书,app pool帐户需要是我数据库中db_owner角色的成员。作者建议,在验证服务的正确地址(已经这样做)后,检查应用程序池帐户的权限。
如何验证托管我的WCF服务的应用程序池使用的帐户?目前使用默认应用程序池和IIS APPPOOL \ DefaultAppPool是db_owner角色。 IIS APPPOOL \ ASP.NET v4.0也是db_owner角色。
例外是......
System.Data.SqlClient.SqlException: Login failed for user 'IIS APPPOOL\DefaultAppPool'.
如何解决此问题?谢谢!
答案 0 :(得分:45)
找到解决方案here:
答案 1 :(得分:2)
如果您使用的是Windows身份验证,并且未在连接字符串中提及任何用户名密码,则首先需要清除:
通过localhost运行代码时会发生什么: 当您从localhost运行wcf测试客户端时,它将能够与本地调试模式应用程序通过您的帐户服务调用数据库进行通信。因此,它可以访问数据库,因为devenv.exe在您的用户帐户下运行。
但是在IIS中部署Web服务时。现在了解此服务在不在您帐户下的IIS下运行。因此,您需要为IIS服务分配访问权限以访问sql server以进行Windows身份验证。 在这里,由于访问权限问题,您的Web服务将无法与SQL服务器通信。
因此,如果您使用Windows身份验证连接数据库,则只需更改IIS应用程序池设置即可。 您需要将IIS应用程序池的标识更改为本地系统。
以下是Windows身份验证WCF的步骤: •打开IIS(Windows + R(运行),然后键入inetmgr,然后单击确定) •双击“连接”下的PC名称 •单击“应用程序池” •选择您的应用程序池(DefaultAppPool) •然后在右键单击高级设置的操作下: •转到“流程模型”部分和 •单击“身份”。 •现在选择LocalSystem。
现在打开你的sql server管理工作室: 开放运行 - >然后键入ssms然后按确定 在ssms中,使用您的Windows身份验证帐户登录。 打开安全选项卡 展开登录选项卡 然后您就可以查看自己的帐户了。
现在打开您帐户的属性 转到userMapping 然后选择要连接的数据库 然后检查要用于所选数据库的角色成员资格服务 点击确定。
添加Trusted_Connection = True;连接字符串中的属性。 保存它&部署Web服务。 重新启动应用程序池。
您现在可以连接数据库了。
答案 2 :(得分:1)
我遇到了同样的问题。问题是我有“IntegratedSecurity = True;”在我的连接字符串中但我使用sql身份验证并同时传入凭据。我删除了IntegratedSecurity部分,一切正常。
答案 3 :(得分:0)
if not exists
(select * from sys.server_principals where name='IIS APPPOOL\DefaultAppPool')
create login [IIS APPPOOL\DefaultAppPool] from windows;