HTTPS 与 HTTP 的 IIS 的 WCF 绑定问题 已关联绑定实例进行侦听



测试 WCF 服务时,IIS 中存在问题。 我们有一个服务,HTTP运行没有问题,比如说在端口8060上(仅示例(。

当我们在端口 8553 上添加 IIS HTTPS 时(再次仅示例(并关联到我们得到的证书时,我们收到错误

已关联绑定实例以侦听 URI "http://:8060/.svc"。如果两个端点需要 若要共享相同的 ListenUri,它们还必须共享相同的绑定 对象实例。指定了两个冲突的终结点 在 AddServiceEndpoint(( 调用中、在配置文件中或 AddServiceEndpoint(( 和 config。

Web.config中的终结点如下所示:

<service name="<name of service>" behaviorConfiguration="DefaultBehaviorConfig">
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="basicHTTPBindingConfig" contract="<interface name>">
    </endpoint>
 </service>

bindingConfiguration吗?

将协议绑定更改为wsHttpBinding

HTTPS 将打开。

此问题主要源于服务终结点地址具有相同的相对地址。请仔细检查所有端点,防止所有端点没有相同的相对地址,例如,以下配置可能会导致此错误。

<services>
  <service name="WcfService1.Service1">
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="mybinding" contract="WcfService1.IService1"></endpoint>
    <endpoint address="" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
  </service>
</services>

请发布完整的配置文件(系统.服务模型部分(,我会给你一个有效的答复。
如果有什么我可以帮忙的,请随时告诉我。
更新。

  <system.serviceModel>
<services>
  <service name="WcfService1.Service1">
    <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1"></endpoint>
    <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1" bindingConfiguration="https"></endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
  </service>
</services>
<bindings>
  <basicHttpBinding>
    <binding name="https">
      <security mode="Transport">
        <transport clientCredentialType="None"></transport>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

我们还可以使用协议映射来简化此配置。

  <system.serviceModel>
<bindings>
  <basicHttpBinding>
    <binding name="https">
      <security mode="Transport">
        <transport clientCredentialType="None"></transport>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior>
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
<protocolMapping>
  <add scheme="https" binding="basicHttpBinding" bindingConfiguration="https"/>
  <add scheme="http" binding="basicHttpBinding"/>
</protocolMapping>

最新更新