IIS托管WCF服务中的身份检查问题

时间:2012-01-16 17:15:55

标签: wcf iis-7 metadata identity wcftestclient

我在IIS7中托管了一组WCF服务。我正在将服务移动到另一个文件夹,以便开始在URL中指定版本和环境。例如:

http://myserver/MyServices/ServiceA.svc

变为:

http://myserver/MyServices/QA/1.1.0/ServiceA.svc

我将新文件夹配置为IIS中的应用程序,并将其设置为在我们一直使用的相同服务应用程序池下运行。这一切都很好,我能够导航到我的.svc URL并查看WSDL或在wcf测试客户端中打开端点。但是,当尝试使用该服务时,我收到以下错误:

传出邮件的身份检查失败。对于'http://myserver/MyServices/QA/1.1,预期的身份是'身份(http://schemas.xmlsoap.org/ws/2005/05/identity/right/possessproperty:http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn)' .0 / ServiceA.svc'目标端点。

当我检查WSDL输出时,我注意到身份部分似乎忽略了应用程序池的标识,它通常包括:

<Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/addressingidentity">
<Upn>myappuser@mydomain.local</Upn>
</Identity>

尝试在IIS中重新部署和重新配置应用程序后,我能够将标识显示在元数据中,仅用于某些服务。其他服务仍然不包括它,这比以前更奇怪。据我所知,在IIS中原始堆栈和新堆栈之间没有零配置差异。我可能遇到什么样的问题会导致这些类型的身份问题?

1 个答案:

答案 0 :(得分:0)

问题是由于尝试将新服务堆栈Web应用程序嵌套在现有服务堆栈Web应用程序中引起的。我认为,当子应用程序中的服务将端点暴露给与根Web应用程序相同的合同时,这可能会导致IIS出现一些混淆(尽管理论上这应该可以正常工作)。我只需将新服务堆栈移动到单独的文件夹结构中。一旦我这样做,我就没有问题让应用程序池标识在元数据中公开。