我正在尝试使用https&网站的http。该网站有.svc文件,这些文件充当REST服务并从JavaScript调用。
我的配置:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="AjaxBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="MyServiceBehaviour">
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceMetadata httpGetEnabled="True" httpsGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<services>
<service behaviorConfiguration="MyServiceBehaviour" name="MyService.Lookups">
<endpoint address="" behaviorConfiguration="AjaxBehavior"
binding="webHttpBinding" bindingConfiguration="httpWebBinding" contract="MyService.Lookups" >
</endpoint>
<endpoint address="" behaviorConfiguration="AjaxBehavior"
binding="webHttpBinding" bindingConfiguration="httpsWebBinding" contract="MyService.Lookups" >
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="httpsWebBinding">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" />
</security>
</binding>
<binding name="httpWebBinding">
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None" />
</security>
</binding>
</webHttpBinding>
</bindings>
</system.serviceModel>
浏览https://myserver/services/Lookups.svc/Hello给出
找不到与具有绑定WebHttpBinding的终结点的方案http匹配的基地址。注册的基本地址方案是[https]
浏览http://myserver/services/Lookups.svc/Hello给出
找不到与具有绑定WebHttpBinding的终结点的方案https匹配的基地址。注册的基本地址方案是[http]
如果我删除任何一个端点,它就会工作。示例删除用bindingConfiguration="httpWebBinding"
配置的端点适用于HTTPS、
如何使用HTTP和HTTPS到目前为止,我可以通过删除一个端点来使用http或https。
参考如何将http和https的WCF服务配置组合在一个web.config中?以及如何设置HTTP和HTTPS WCF 4 RESTful服务?
注意:在IIS中,它是两个网站,一个在http上侦听,另一个在https。两者在物理文件夹中共享相同的代码
更新:到目前为止,我删除了端点,它起作用了。但我担心的是删除用behaviourConfiguration配置的enddoing对我来说并不是一个好的解决方案
这对http&https
<services>
<service behaviorConfiguration="MyServiceBehaviour" name="MyService.Lookups">
</service>
</services>
我重新创建了您的场景,并使用web.config为我的测试服务配置端点。您的配置正常,工作正常。不适合您的部分可能是IIS中的https配置。请确保您已启用https访问您的服务。如果您使用Visual Studio中的IISExpress进行测试,请左键单击您的项目,然后在属性窗口(查看->属性窗口)中选择SSL Enabled=True。
正如@Lesmian在回答中指出的那样,问题出在您的IIS配置中。更具体地说:
注意:在IIS中,它是两个网站,一个在http上侦听,另一个在https上侦听。两者在物理文件夹中共享相同的代码
原因是IIS无法处理它不支持的架构上的终结点。
您有两个站点,其中一个具有HTTP绑定但没有HTTPS,另一个具有HTTPS但没有HTTP。
因此,当您浏览到http://URL时,IIS会将您引导到启用了http的站点,读取web.config,发现它注册了https端点(该站点不支持该端点),并抛出异常,告知仅启用http的站点上不支持https://strong>方案。
当您浏览到https://URL时,情况类似-IIS不允许您在仅启用https的网站上使用http端点。
要处理这个问题,最好使用一个带有两个绑定的站点。
另一个(也是更复杂的)选项是为站点使用不同的web.config:设置单独的站点(指向单独的文件夹),并使用Visual Studio 的发布和web.config转换工具
添加此代码。
<protocolMapping>
<add scheme="http" binding="webHttpBinding" bindingConfiguration="httpWebBinding"/>
<add scheme="https" binding="webHttpBinding" bindingConfiguration="httpsWebBinding"/>
</protocolMapping>
我不知道这个查询是否仍然有效,但正如我所检查的,请
还添加binding="mexHttpsBinding"
具有不同端点的binding="mexHttpBinding"
这对我有帮助。