代码之家  ›  专栏  ›  技术社区  ›  Mike Blandford

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

  •  41
  • Mike Blandford  · 技术社区  · 15 年前

    我去 https://mywebsite/MyApp/Myservice.svc 并得到以下错误:

    (如果我使用http://

    由于编译期间出现异常,无法激活服务“/myapp/myservice.svc”。异常消息为:找不到与绑定basichttpbinding的端点的方案https匹配的基地址。注册的基址方案是[http]。

    编辑: 所以如果我改变 address="" address="https:// ..." 然后我得到这个错误:

    错误:不支持协议“https”。…' https://.../Annotation.svc “with contract(s)”“annotation”无法打开其ichannellistener。

    这就是我的 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 回复  |  直到 8 年前
        1
  •  27
  •   Jacob    13 年前

    我也有同样的问题。但我的解决方案是在绑定值中添加一个“s”。

    旧的: binding=“mexhtpbinding”

    新的: binding=“mexhtpsbinding”

    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>
    
        2
  •  20
  •   meetjaydeep    12 年前

    结果发现我的问题是,我使用了一个负载均衡器来处理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而不是http s

    <endpoint address="" listenUri="http://[LOAD_BALANCER_ADDRESS]" ... />
    
        3
  •  8
  •   Simon_Weaver    14 年前

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

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

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

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

        4
  •  3
  •   Sixto Saez    10 年前

    我认为您正在尝试以类似于以下配置的方式配置服务。这里有更多信息: Specify a Service with Two Endpoints Using Different Binding Values . 此外,除了用于开发之外,将两个HTTP&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>
    
        5
  •  1
  •   Sandeep Polavarapu    12 年前

    在我的例子中,我将安全模式设置为“TransportCredentially”,而不是绑定中的“Transport”。改变它解决了这个问题

    <bindings>
      <webHttpBinding>
        <binding name="webHttpSecure">
          <security mode="Transport">
            <transport clientCredentialType="Windows" ></transport>
          </security>
          </binding>
      </webHttpBinding>
    </bindings>
    
        6
  •  0
  •   atconway    12 年前

    我使用的是webhttpbinding,忘记在绑定配置上指明“transport”的安全模式,这导致了错误:

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

    在配置中添加这个解决了这个问题。

        7
  •  0
  •   John Saunders KB22    12 年前

    查看您的基地址和端点地址(在示例代码中看不到)。很可能您遗漏了一个列或其他拼写错误,例如https/,而不是https/。/