在WCF服务中配置HTTPS时出错

时间:2015-04-09 18:33:37

标签: c# wcf https wcf-endpoint

我在VS 2010,.NET 4.0中有一个Wcf服务。

IIS站点是虚拟目录。

我尝试配置它并使用https

访问它
  

https://pruebaslba.xxxx.net/ServicioPyS/Service.svc?wsdl

但我收到错误

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/

有什么建议吗?

1 个答案:

答案 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方案为您创建虚拟目录。