对于HTTPS,具有不同EndPoints和不同绑定的相同WCF服务

时间:2015-07-21 12:34:58

标签: c# web-services wcf

我已经查看了几个关于SO的帖子,这些帖子显示了如何为同一个服务添加多个端点,但是其中没有一个实际上是使用HTTPS,这就是我提出这个问题的原因。

我有什么

我有一个网络服务,

https://portal.gov.com/us/216/_vti_bin/external/gov.svc

我想要什么

我想使用两种不同的配置调用此Web服务,并使用不同的ENDPOINTS但是SAME URL绑定? (对不起,也许我对EndPoints的概念感到困惑)

这是我的web.config的样子,

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Gov_ServiceBehavior">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
        </behavior>
      </serviceBehaviors>

      <endpointBehaviors>
        <behavior name="restBehavior">
          <webHttp defaultBodyStyle="Wrapped" defaultOutgoingResponseFormat="Json" automaticFormatSelectionEnabled="true" />
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <bindings>
      <webHttpBinding>
        <binding name="Gov_webHttpBinding">
          <security mode="Transport">
            <transport clientCredentialType="InheritedFromHost" />
          </security>
        </binding>
      </webHttpBinding>
      <!--<basicHttpBinding>
        <binding name="Gov_BasicHttpBinding">
          <security mode="Transport">
            <transport clientCredentialType="InheritedFromHost" />
          </security>
        </binding>
      </basicHttpBinding>-->
    </bindings>

    <services>
      <service name="Portal.WebServices.External.Gov" behaviorConfiguration="Gov_ServiceBehavior">
        <endpoint address="" binding="webHttpBinding" behaviorConfiguration="restBehavior" contract="Portal.WebServices.External.IGov" bindingConfiguration="Gov_webHttpBinding"/>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
        <!--<endpoint address="basic" binding="basicHttpBinding" contract="Portal.WebServices.External.IGov" bindingConfiguration="Gov_BasicHttpBinding"/>-->
      </service>
    </services>

  </system.serviceModel>

</configuration>

痛苦在哪里

只有在我将basicHttpBinding注释掉它及其终点之后,IT才会有效,只要我加入它,我就会收到无声错误。

根据这个 - https://msdn.microsoft.com/en-us/library/ms751515(v=vs.110).aspx

它应该可以工作,但它可能不是因为我使用HTTPS并将BINDINGS标记添加到我的web.Config

1 个答案:

答案 0 :(得分:0)

你想要达到的目标是不可能的。您不能将两个不同的绑定应用于完全相同的端点。如果您尝试再次阅读您的参考文献here,则很明显该样本有两个不同的端点:

第一个地址是http://localhost/servicemodelsamples/service.svc,第二个地址是http://localhost/servicemodelsamples/service.svc/securehttp://localhost/servicemodelsamples/service.svc。这两个端点彼此不同,但共享相同的合同。

第二个端点只是相对于基地here

我希望这能让你明白绑定和端点。