我正在研究“Windows Communication Foundation 4 Step By Step”中的一些 WCF 示例。只要该服务托管在 casini 中,我生成的应用程序就可以正常运行。当我将服务部署到本地 IIS 时失败。当部署到IIS时,我可以在IE中浏览到svc页面。这有效。
根据本书第 41 页,应用程序池帐户需要是我的数据库中 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'.
如何解决此问题?谢谢!
在此处找到解决方案:
当您通过本地主机运行代码时会发生什么: 当您从本地主机运行 wcf 测试客户端时,它将能够与数据库通信,因为本地调试模式应用程序正在通过您帐户的服务调用数据库。因此它可以访问数据库,因为 devenv.exe 在您的用户帐户下运行。
但是当您在 IIS 中部署 Web 服务时。现在了解此服务在 IIS 下运行,而不是在您的帐户下运行。所以需要给IIS服务分配访问权限来访问sql server进行windows身份验证。 由于访问权限问题,您的 Web 服务将无法与 SQL 服务器通信。
因此,如果您使用 Windows 身份验证来连接数据库,则只需更改 IIS 应用程序池设置即可。 您需要将 IIS 应用程序池的身份更改为本地系统。
以下是 Windows 身份验证 WCF 的步骤: 打开IIS(windows+R(运行)然后输入inetmgr,然后单击确定) •在“连接”下双击您的电脑名称 •单击应用程序池 •选择您的应用程序池(DefaultAppPool) •然后在右键的操作下单击高级设置: •转至流程模型部分并 •单击“身份”。 •现在选择本地系统。
现在打开你的sql server management studio: 打开运行->然后输入 ssms 然后按确定 在 ssms 中,使用您的 Windows 身份验证帐户登录。 打开安全选项卡 展开登录选项卡 然后您就可以查看您的帐户了。
现在打开您帐户的属性 转到用户映射 然后选择你要连接的数据库 然后检查您要用于所选数据库的角色成员资格服务 单击“确定”。
添加 Trusted_Connection=True;连接字符串中的属性。 保存并部署 Web 服务。 重新启动应用程序池。
您现在就可以连接数据库了。
if not exists
(select * from sys.server_principals where name='IIS APPPOOL\DefaultAppPool')
create login [IIS APPPOOL\DefaultAppPool] from windows;
Integrated Security = True
不起作用,您需要更改IIS中的应用程序池。
iisreset