我正在尝试为我正在编写的WCF应用程序设置消息级安全性。此应用程序已具有使用传输级别安全性设置的端点。我可以设置另一个具有消息级别安全性的端点吗?顺便说一下,此应用程序正在IIS上运行。我在同一配置文件中设置了一个单独的服务,如此...
<service name="generalName">
<endpoint address=...>
.
.
.
</service>
<service name="generalName2">
<endpoint address=""...>
</service>
我问这个的原因是因为我认为我已经设定了一切,我认为它可以工作。但是当我尝试访问以前的服务时,我收到以下错误...
此服务的安全设置 需要Windows身份验证,但它 未启用IIS应用程序 托管这项服务。
我知道之前的服务有效,因为我可以在设置第二个服务之前访问它。
对我有什么建议吗?我应该尝试在这里写一个完全独立的服务,还是有办法解决这个问题?
答案 0 :(得分:3)
不知道你使用什么绑定 - 取决于该绑定是否同时支持传输和消息安全 - 是的,当然你应该能够公开两个端点,一个具有传输安全性,另一个具有消息安全性。
由于这只是一个服务,有两个端点,所以您的配置应该是这样的(我选择wsHttpBinding
作为我的示例 - 根据需要进行调整):
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="TransportSec">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
<binding name="MessageSec">
<security mode="Message">
<message clientCredentialType="UserName" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service name="YourService" >
<endpoint name="Transport"
address="Transport"
binding="wsHttpBinding"
bindingConfiguration="TransportSec"
contract="IYourService" />
<endpoint name="Message"
address="Message"
binding="wsHttpBinding"
bindingConfiguration="MessageSec"
contract="IYourService" />
</service>
</services>
</system.serviceModel>
基本上,您定义了两个绑定配置,然后您的一个服务有两个端点,一个使用传输安全绑定配置,另一个端点使用消息安全绑定配置。
这两个端点当然不能具有相同的地址 - 因此您需要为每个端点提供两个单独的(相对)地址。