带有WCF错误的https:“找不到与方案https匹配的基址”

时间:2008-12-12 16:32:19

标签: wcf https

我转到https://mywebsite/MyApp/Myservice.svc并收到以下错误:

(如果我使用http://,该链接有效)

由于编译期间发生异常,无法激活服务'/MyApp/MyService.svc'。异常消息是:找不到与绑定BasicHttpBinding的端点的方案https匹配的基址。基地址方案是[http] ..

编辑:因此,如果我将address=""更改为address="https:// ...",那么我会收到此错误:

错误:不支持协议'https'.....'https://.../Annotation.svc'的ChannelDispatcher与合同'”注释“'无法打开其IChannelListener。< / EM>“

这是Web.Config的样子:

<services>
      <service behaviorConfiguration="AnnotationWCF.AnnotationBehavior"
              name="AnnotationWCF.Annotation">
              <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_Annotation"
                      contract="AnnotationWCF.Annotation" />
              <endpoint address="" 
                  binding="basicHttpBinding" bindingConfiguration="SecureTransport"
                  contract="AnnotationWCF.Annotation" />
              <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>

<bindings>
<basicHttpBinding>
    <binding name="BasicHttpBinding_Annotation" maxBufferSize="2147483647"
            maxReceivedMessageSize="2147483647">
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647"
            maxNameTableCharCount="2147483647" />
    </binding>
    <binding name="SecureTransport" maxBufferSize="2147483647"
            maxReceivedMessageSize="2147483647">
        <security mode="Transport">
        <transport clientCredentialType="None"/>
        </security>
        <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647"
            maxNameTableCharCount="2147483647" />
    </binding>
</basicHttpBinding>

7 个答案:

答案 0 :(得分:27)

我有同样的问题。除了我的解决方案是在绑定值上添加“s”。

<强>旧: 结合= “mexHttpBinding”

结合= “mexHttpsBinding”

web.config片段:

<services>
    <service behaviorConfiguration="ServiceBehavior" name="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService">
        <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding" bindingConfiguration="webBinding" 
            contract="LIMS.UI.Web.WCFServices.Accessioning.QuickDataEntryService" />
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange" />
    </service>

答案 1 :(得分:20)

事实证明,我的问题是我使用负载均衡器处理SSL,然后通过http将其发送到实际的服务器,然后抱怨。

修复说明如下:http://blog.hackedbrain.com/2006/09/26/how-to-ssl-passthrough-with-wcf-or-transportwithmessagecredential-over-plain-http/

编辑:在与微软支持人员交谈后,我解决了我的问题,这个问题略有不同。

我的silverlight应用程序的代码中的端点地址超过https到负载均衡器。然后,负载均衡器将端点地址更改为http并指向它将要访问的实际服务器。因此,在每个服务器的Web配置上,我为端点添加了一个listenUri,它是http而不是https

<endpoint address="" listenUri="http://[LOAD_BALANCER_ADDRESS]" ... />

答案 2 :(得分:8)

确保为您的服务器启用了SSL!

我尝试在没有该证书的本地盒子上使用HTTPS配置文件时出现此错误。我试图通过将一些绑定从HTTPS转换为HTTP来进行本地测试。我认为这样做比尝试安装自签名证书进行本地测试更容易。

原来我得到了这个错误因为我没有启用SSL 在我的本地IIS上,即使我不打算实际使用它。

HTTPS配置中有一些内容。在IIS7中创建自签名证书允许HTTP工作: - )

答案 3 :(得分:3)

我认为您尝试以与以下配置类似的方式配置服务。这里有更多信息:Specify a Service with Two Endpoints Using Different Binding Values。此外,除了开发之外,同时拥有HTTP和Linux可能不是一个好主意。 HTTPS端点指向同一服务。它有点挫败了HTTPS的目的。希望这有帮助!

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="shortTimeout"
    </endpoint>
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="Secure"
     </endpoint>
</service>
<bindings>
    <basicHttpBinding 
        name="shortTimeout"
        timeout="00:00:00:01" 
     />
     <basicHttpBinding 
        name="Secure">
        <Security mode="Transport" />
     </basicHttpBinding>
</bindings>

答案 4 :(得分:1)

在我的情况下,我在绑定中将安全模式设置为“TransportCredentialOnly”而不是“Transport”。更改它解决了问题

<bindings>
  <webHttpBinding>
    <binding name="webHttpSecure">
      <security mode="Transport">
        <transport clientCredentialType="Windows" ></transport>
      </security>
      </binding>
  </webHttpBinding>
</bindings>

答案 5 :(得分:0)

查看您的基地址和您的终端地址(在示例代码中看不到它)。很可能你错过了专栏或其他一些错字,例如https //而不是https://

答案 6 :(得分:0)

我正在使用webHttpBinding并忘记指定&#34; Transport&#34;的安全模式。在导致错误的绑定配置上:

  <webHttpBinding>
    <binding name="MyWCFServiceEndpoint">
      <security mode="Transport" />
    </binding>
  </webHttpBinding>

在配置中添加此项修复了问题。