据我所知,有很多关于此的帖子,我已经浏览了所有搜索结果,并实现了所提到的所有内容。我有一个WCF Web服务,可以在我的本地系统上使用HTTP,它可以在HTTP上的服务器上运行。但客户端要求通过HTTPS工作。这个站点和其他站点上的帖子的镜像表明,这并不像应该的那样直截了当,因为在此之前,ASMX Web服务“只是工作”并且不需要复杂的配置。
我的当前配置出现以下错误:
无法找到与方案https匹配的基地址 绑定WSHttpBinding的端点。注册的基地址方案 是[http]。
这是我这段时间的代码,经过几天的努力来配置这项工作无济于事:
<system.serviceModel>
<!-- -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" >
<baseAddressPrefixFilters>
<add prefix="https://mysite.com"/>
<add prefix="http://mysite.com"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<!-- Set up Custom Behaviors -->
<behaviors>
<endpointBehaviors>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="WebPostService.WebPostServiceBehavior">
<serviceMetadata httpsGetEnabled="true" httpsGetUrl="WebPostServices.svc/mex" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<!-- Set up the binding configuration -->
<bindings>
<wsHttpBinding>
<binding name="SOAPBinding"
>
<security mode="Transport">
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service
behaviorConfiguration="WebPostService.WebPostServiceBehavior"
name="WebPostService.WebPostService"
>
<host>
<baseAddresses>
<add baseAddress="https://mysite.com/Services/WebPostService.svc"/>
</baseAddresses>
</host>
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="SOAPBinding"
contract="WebPostService.IWebPostService"
>
<identity>
<dns value="mysite.com" />
</identity>
</endpoint>
<endpoint
address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange"
>
</endpoint>
</service>
</services>
</system.serviceModel>
我做错了什么,如何让它通过HTTPS工作?我很沮丧,这不是应该的那么简单。我已经在MSDN的WCF文档中埋葬了这个项目的几个月,并且很好地掌握了服务,端点和绑定 - 足以让我感到沮丧甚至比我根本不知道的更多。
更新:还在努力,我在尝试为mex地址填写完整的URL时出现了一个奇怪的错误。我改变了这个:
address="https://prcwebs.com/Services/WebPostService.svc/mex"
并收到错误:
此服务的安全设置需要Windows身份验证,但是 它未为承载此服务的IIS应用程序启用。
我没有尝试使用Windows身份验证,安全设置未更改,仍设置为
&lt; security mode =“Transport”/&gt;
Could not find a base address that matches scheme https for the endpoint with binding WebHttpBinding. Registered base address schemes are [http] - 没有帮助,没有提到会有所帮助 Could not find a base address that matches scheme http for the endpoint with binding WSHttpBinding - 我正在使用运输安全,这不适用。尝试改变到不同的安全模式,仍然无法让网站工作。
答案 0 :(得分:3)
将multipleSiteBindingsEnabled="true"
添加到serviceHostingEnvironment
并更新安全性以禁用客户端凭据:
<security mode="Transport">
<transport clientCredentialType="None"></transport>
</security>
修改强> 我在Windows 2003下的最终工作版本使用以下配置。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" />
<!-- Set up Custom Behaviors -->
<behaviors>
<endpointBehaviors>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="WebPostService.WebPostServiceBehavior">
<serviceMetadata httpsGetEnabled="true" httpsGetUrl="WebPostServices.svc/mex" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<!-- Set up the binding configuration -->
<bindings>
<wsHttpBinding>
<binding name="SOAPBinding">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="WebPostService.WebPostServiceBehavior"
name="WcfService2.Service1">
<host>
<baseAddresses>
<add baseAddress="https://localhost/Service/Service1.svc"/>
</baseAddresses>
</host>
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="SOAPBinding"
contract="WcfService2.IService1">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange">
</endpoint>
</service>
</services>
</system.serviceModel>
您可以使用https访问该网站,因此我猜安装的证书部分是正确的。如果您有任何想要与我的设置进行比较的内容,请与我们联系。
答案 1 :(得分:3)
您使用的是错误的HTTPS绑定。
有两个单独的绑定类。 wsHttpBinding和wsHttpsBinding注意到s。 您需要在绑定下为HTTPS添加wsHttpsBinding,并且您需要为该绑定提供新的端点。
此外,您看到的特定错误通常我会看到是否尚未从该位置为https设置IIS。
答案 2 :(得分:2)
我用过这个,它对我有用,也许它可以帮到你
要在WCF WsHttp绑定上启用Https,可以在web.config文件中更改一些简单的步骤。
这些步骤是:
在服务的web.config文件中启用传输级别安全性:
在此步骤中,您需要将安全模式从none更改为Transport。下面的代码显示了如何执行此操作:
<bindings>
<wsHttpBinding>
<binding name="TransportSecurity">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
绑定绑定并指定HTTPS配置
您现在需要将绑定(预览步骤)与结束点相关联。使用bindingConfiguration标记指定绑定名称。您还需要指定托管服务的地址。下面的代码显示了如何做到这一点
<service name="WCFWSHttps.Service1" behaviorConfiguration="WCFWSHttps.Service1Behavior">
<!-- Service Endpoints -->
<endpoint address=https://localhost/WCFWSHttps/Service1.svc binding="wsHttpBinding" bindingConfiguration="TransportSecurity" contract="WCFWSHttps.IService1"/>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
</service>
。 您还需要在serviceMetaData中将httpGetEnabled更改为httpsGetEnabled。下面的代码展示了你如何做到:
<serviceMetadata httpsGetEnabled="true"/>
希望有所帮助
答案 3 :(得分:0)
我在3.5设置中使用了您的确切配置,并使用Transport
模式使用clientCredentialType="None"
模式,如下面Luuk的回答中所述。但是,为了确定,我继续创建了一个示例项目,以模拟您从此处的信息中收集到的环境。
要模拟您的环境,我将IIS(7.5)设置为使用标准Asp.Net 2.0 Integrated
应用程序池。我添加了3个http绑定和3个https绑定,以模拟“每个方案问题只能有一个地址”,baseAddressPrefixFilters
可以使用它。
我只对mysite.com
localhost
进行了搜索和替换。下面是我用来制作屏幕截图的精确配置的复制粘贴:
<强>的web.config 强>
<?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" />
<authentication mode="None"/>
<customErrors mode="Off"/>
</system.web>
<system.serviceModel>
<!-- -->
<serviceHostingEnvironment aspNetCompatibilityEnabled="true">
<baseAddressPrefixFilters>
<add prefix="https://localhost"/>
<add prefix="http://localhost"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<!-- Set up Custom Behaviors -->
<behaviors>
<endpointBehaviors/>
<serviceBehaviors>
<behavior name="WebPostService.WebPostServiceBehavior">
<serviceMetadata httpsGetEnabled="true" httpsGetUrl="WebPostServices.svc/mex"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<!-- Set up the binding configuration -->
<bindings>
<wsHttpBinding>
<binding name="SOAPBinding">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="WebPostService.WebPostServiceBehavior" name="WebPostService.WebPostService">
<host>
<baseAddresses>
<add baseAddress="https://localhost/Services/WebPostService.svc"/>
</baseAddresses>
</host>
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="SOAPBinding" contract="WebPostService.IWebPostService">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
</service>
</services>
</system.serviceModel>
</configuration>
结果如下:
您会注意到WebPostService.svc
在mex
个完整网址中出现两次httpsGetUrl
。您需要将mex
删除为仅WebPostService.svc/mex
而不是{{1}}(或完全删除它,并且它仍能在我身边正常工作)
如果你想讨论这个或者除了IIS版本之外我们的环境之间有什么不同,我几乎整天都在WPF聊天室(另外5-6小时)。