带有 WCF 错误的 https:“找不到与方案 https 匹配的基地址”
Posted
技术标签:
【中文标题】带有 WCF 错误的 https:“找不到与方案 https 匹配的基地址”【英文标题】:https with WCF error: "Could not find base address that matches scheme https" 【发布时间】:2010-09-26 16:06:01 【问题描述】:我去https://mywebsite/MyApp/Myservice.svc 得到以下错误:
(如果我使用 http:// 链接有效)
"服务'/MyApp/MyService.svc'由于编译过程中的异常而无法激活。异常消息是:找不到与绑定BasicHttpBinding的端点的方案https匹配的基地址。已注册基地址方案是 [http].."
编辑:因此,如果我将 address=""
更改为 address="https:// ..."
,则会收到此错误:
“错误:不支持协议“https”......“https://.../Annotation.svc”的 ChannelDispatcher 与合同“注释”无法打开其 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>
【问题讨论】:
【参考方案1】:我遇到了同样的问题。除了我的解决方案是在绑定值中添加一个“s”。
旧: 绑定="mexHttpBinding"
新功能: 绑定="mexHttpsBinding"
web.config sn-p:
<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】:原来我的问题是我使用负载平衡器来处理 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]" ... />
【讨论】:
链接 -> blog.hackedbrain.com/archive/2006/09/26/5281.aspx 无效。 使用链接-> blog.hackedbrain.com/2006/09/26/…【参考方案3】:确保为您的服务器启用 SSL!
尝试在没有该证书的本地机器上使用 HTTPS 配置文件时出现此错误。我试图进行本地测试 - 通过将一些绑定从 HTTPS 转换为 HTTP。我认为这样做比尝试安装自签名证书进行本地测试更容易。
原来我收到此错误是因为 我没有在本地 IIS 上启用 SSL,即使我并不打算实际使用它。
HTTPS 配置中有问题。在 IIS7 中创建自签名证书允许 HTTP 工作:-)
【讨论】:
我发现确保 IIS (6.0) 正在侦听端口 443 就足够了(右键单击默认网站、属性、SSL 端口、重新启动)。我还没有创建证书。 我发现@rory-macleod 的上述评论非常有帮助。在本地运行时,请确保通过右键单击 Visual Studio 中的项目来启用 SSL,然后在“项目属性”面板中将“启用 SSL”设置为“真”。然后,系统会提示您安装自签名证书。 @Jeff 谢谢就是这样!几天来我一直试图让它工作【参考方案4】:我认为您正在尝试以与以下配置类似的方式配置您的服务。这里有更多信息: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>
【讨论】:
这看起来像是 MSDN 中的错字。在 Security mode="Transport" 之后不应该关闭第二个 basicHttpBinding 吗?有趣的是,安全地址以 http 开头,而不是 https。【参考方案5】:在我的情况下,我在绑定中将安全模式设置为“TransportCredentialOnly”而不是“Transport”。更改它解决了问题
<bindings>
<webHttpBinding>
<binding name="webHttpSecure">
<security mode="Transport">
<transport clientCredentialType="Windows" ></transport>
</security>
</binding>
</webHttpBinding>
</bindings>
【讨论】:
【参考方案6】:我正在使用 webHttpBinding 并且忘记在导致错误的绑定配置上指明“传输”的安全模式:
<webHttpBinding>
<binding name="MyWCFServiceEndpoint">
<security mode="Transport" />
</binding>
</webHttpBinding>
在配置中添加这个可以解决问题。
【讨论】:
【参考方案7】:查看您的基地址和端点地址(在您的示例代码中看不到)。很可能你错过了一个专栏或其他一些错字,例如https:// 而不是 https://
【讨论】:
以上是关于带有 WCF 错误的 https:“找不到与方案 https 匹配的基地址”的主要内容,如果未能解决你的问题,请参考以下文章
带有 CustomBinding 的 WCF 服务配置 HTTPS
带有消息的零星 WCF 服务激活错误 - 访问 IIS 元数据库时发生错误