0

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

http://myserver/MyServices/ServiceA.svc

变成:

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

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

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

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

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

在尝试在 IIS 中重新部署和重新配置应用程序后,我能够让身份仅出现在某些服务的元数据中。其他服务还是不包括在内,这比以前更奇怪了。据我所知,IIS 中的原始堆栈和新堆栈之间的配置差异为零。我会遇到哪些类型的问题会导致这些类型的身份问题?

4

1 回答 1

0

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

于 2012-01-19T17:04:05.610 回答