我在VS 2010,.NET 4.0中有一个Wcf服务。
IIS站点是虚拟目录。
我尝试配置它并使用https
访问它但我收到错误
Could not find a base address that matches scheme https for the endpoint with binding WSHttpBinding. Registered base address schemes are [http].
或
Could not find a base address that matches scheme https for the endpoint with binding BasicHttpBinding. Registered base address schemes are [http].
谷歌,我已经看到了几种有关配置的选择:serviceMetadata,bindings,baseAddresses,..
我尝试了不同的配置,但是我得到了同样的错误:
serviceMetadata
<serviceMetadata httpGetEnabled="false or true" httpsGetEnabled="true" />
绑定
我使用<security mode="Transport">
<bindings>
<basicHttpBinding>
<binding name="SecureTransportOnly">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
</security>
</binding>
<binding name="NoSecure">
<security mode="None"><transport clientCredentialType="None"/></security>
</binding>
</basicHttpBinding>
<wsHttpBinding>
<binding name="SecureTransportOnly">
<security mode="Transport">
<transport clientCredentialType="None" proxyCredentialType="None" realm="" />
</security>
</binding>
</wsHttpBinding>
</bindings>
端点
<endpoint
address=""
binding="basicHttpBinding"
bindingConfiguration="SecureTransportOnly"
name="xxxActualServiceEndPoint"
bindingNamespace="https://pruebaslba.xxxx.net/ServicioPyS"
contract="IxxxActualService">
MEX
<endpoint address="mex" binding="mexHttpBinding o mexHttpsBinding" contract="IMetadataExchange"/>
我也试过了:
<!--<host>
<baseAddresses>
<add baseAddress="https://pruebaslba.xxxx.net o https://pruebaslba.xxxx.net/ServicioPyS"/>
</baseAddresses>
</host>-->
<!--<identity>
<dns value="localhost" />
</identity>-->
我认为,我尝试了几乎在论坛中发现的配置。我不知道解决方案。
更新 我得到了更多关于它的信息。 该网站位于2个服务器(PreProduction环境)中: preiis01和preiis02 。 未启用SSL。
我可以访问http://preiis01/ServicioPyS/Service.svc?wsdl 一切都可以通过http。
https://pruebaslba.xxxx.net/ServicioPyS/Service.svc?wsdl是关于NLB的公共网址(负载均衡,我认为,F5)。在NLB中,配置了SSL。我不知道更多信息,只有IT部门有所有信息。
问题在于WSDL
http://preiis01/ServicioPyS/Service.svc?wsdl
<wsdl:service name="ActualService">
<wsdl:port name="ActualServiceEndPoint"binding="i0:ActualServiceEndPoint">
<soap:addresslocation="http://preiis01/ServicioPyS/Service.svc/Service.svc" />
</wsdl:port>
</wsdl:service>
NLL中的URL WSDL在 soap:地址位置部分存在问题,并且没有正确生成(设置http,而不是https)
https://pruebaslba.xxxx.net/ServicioPyS/Service.svc?wsdl
<wsdl:service name="ActualService">
<wsdl:port name="ActualServiceEndPoint"binding="i0:ActualServiceEndPoint">
<soap:addresslocation="http://pruebaslba.xxxx.net/ServicioPyS/Service.svc/Service.svc" />
</wsdl:port>
</wsdl:service>
快速解决方案是手动修改WSDL(单个文件)并在 soap:addresslocation 部分中设置 https ,在新网址 https://pruebaslba.xxxx.net/ServicioPyS/WSDL/ServiceWsdlModificado.Single.wsdl
https://pruebaslba.xxxx.net/ServicioPyS/WSDL/ServiceWsdlModificado.Single.wsdl
<wsdl:service name="ActualService">
<wsdl:port name="ActualServiceEndPoint"binding="tns:ActualServiceEndPoint">
<soap:addresslocation="https://pruebaslba.xxxx.net/ServicioPyS/Service.svc/Service.svc"/>
</wsdl:port>
</wsdl:service>
我认为,还有另一个良好做法的好解决方案。我不知道。
IIS中的网站未启用SSL,NLB具有SSL。
也许是“SSL传递”,我不知道
http://blog.tonysneed.com/2012/06/18/building-scalable-and-secure-wcf-services/
有什么建议吗?
答案 0 :(得分:0)
有错误说您的基地址使用了&#39; http&#39;方案,当它需要使用&#39; https。&#39;在IIS中托管时,地址在IIS中配置,而不是在config中配置。
这意味着您需要在IIS中设置SSL:http://www.iis.net/learn/manage/configuring-security/how-to-set-up-ssl-on-iis。
然后以管理员身份打开Visual Studio,然后转到项目属性的Web选项卡并更改其中的基址以使用https和本地IIS。 VS将使用https方案为您创建虚拟目录。