我转到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>
答案 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将其发送到实际的服务器,然后抱怨。
编辑:在与微软支持人员交谈后,我解决了我的问题,这个问题略有不同。
我的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>
在配置中添加此项修复了问题。