同一WCF配置文件中的消息级安全性和传输级安全性

时间:2011-05-17 16:05:59

标签: web-config wcf-security

我正在尝试为我正在编写的WCF应用程序设置消息级安全性。此应用程序已具有使用传输级别安全性设置的端点。我可以设置另一个具有消息级别安全性的端点吗?顺便说一下,此应用程序正在IIS上运行。我在同一配置文件中设置了一个单独的服务,如此...

<service name="generalName">
  <endpoint address=...>
   .
   .
   .
</service>
<service name="generalName2">
   <endpoint address=""...>
</service>

我问这个的原因是因为我认为我已经设定了一切,我认为它可以工作。但是当我尝试访问以前的服务时,我收到以下错误...

  

此服务的安全设置   需要Windows身份验证,但它   未启用IIS应用程序   托管这项服务。

我知道之前的服务有效,因为我可以在设置第二个服务之前访问它。

对我有什么建议吗?我应该尝试在这里写一个完全独立的服务,还是有办法解决这个问题?

1 个答案:

答案 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>

基本上,您定义了两个绑定配置,然后您的一个服务有两个端点,一个使用传输安全绑定配置,另一个端点使用消息安全绑定配置。

这两个端点当然不能具有相同的地址 - 因此您需要为每个端点提供两个单独的(相对)地址。