使用具有不同绑定配置的{2}端点配置WCF服务

时间:2016-02-27 00:49:59

标签: wcf http iis

我使用WsHttpBinding创建了一个WCF服务,具有2个绑定配置(这是2个不同客户端的要求)。一个客户端希望该服务具有Message client安全模式,clientCredential为“Windows”,另一个客户端希望该服务具有TransportCredentialType为“Certificate”的传输安全模式。我能够浏览我的Client2服务但无法浏览我的client1。 这是我的带有2个绑定的web.config:

    <system.serviceModel>
    <services>
      <service name="TestService.TestService" behaviorConfiguration="mexBehavior">
        <endpoint address="Client1" binding="wsHttpBinding" contract="TestService.ITestService" bindingConfiguration="TestService_Client1_ITestService" >
         <identity>
            <dns value="" />
          </identity>
         </endpoint>    
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>          
        <endpoint address="Client2" binding="wsHttpBinding" contract="TestService.ITestService" bindingConfiguration="TestService_Client2_ITestService" />                               
      </service>                    
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="mexBehavior">           
          <useRequestHeadersForMetadataAddress />
          <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />                            
        </behavior>
      </serviceBehaviors>        
    </behaviors>  
    <bindings>
      <wsHttpBinding>                
        <binding name="TestService_Client1_ITestService">         
            <security mode="Message">
                <transport clientCredentialType="Windows" proxyCredentialType="None"
                realm="" />
                <message clientCredentialType="Windows" negotiateServiceCredential="true"
                algorithmSuite="Default" />
            </security>
        </binding>

        <binding name="TestService_Client2_ITestService">             
            <security mode="Transport">
                  <!--<transport clientCredentialType="None" />-->
                  <transport clientCredentialType="Certificate" />
            </security>         
        </binding>          
    </wsHttpBinding>
</bindings>

以下是我在IIS中所做的设置:

1)创建了一个新网站“TestService”

2)在绑定中: a)使用端口:444添加https并选择适当的证书 b)使用port:90

添加http

3)在IIS TestService功能视图中 - &gt; SSL设置 - &gt;要求SSL(已启用),接受并应用

4)身份验证 - &gt;表单身份验证,Windows,匿名启用

请建议我应该对配置或IIS做出哪些更改,以便我有两个终点工作...

此外,我将端点命名为Client1和Client2,假设我应该能够将它们浏览为
a)http://localhost:90/TestService.svc/Client1
b)https://localhost:444/TestService.svc/Client2

目前,我可以用
浏览我的服务(client2) https://localhost:444/TestService.svc/

如果我在最后添加Client2,则无法正常工作。我不确定我的端点地址名称是否正常工作。

由于

1 个答案:

答案 0 :(得分:0)

在做了一些研究后,我得到了两个终点工作..在IIS步骤中,

3)在IIS TestService功能视图中 - &gt; SSL设置 - &gt;取消选中需要SSL(取消选中此),但选中(接受)并选择应用

这对我来说很有把握,我能够让两个终点都有效。

另外,在我的问题中,我误解了能够浏览两个端点:
a)http://localhost:90/TestService.svc/Client1
b)https://localhost:444/TestService.svc/Client2

实际上,我们无法浏览,这种表示法在创建客户端时很有用,可以使用端点名称或基于端点配置实例化