WCF:提供的URI方案"https"无效; 预计'http'.参数名称:当我调用IInternal proxy = factory.CreateChannel()时的via; 在客户端

use*_*837 6 c# wcf

服务器的App.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.web>
    <compilation debug="true"/>
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="NewBehaviour">
          <serviceMetadata httpsGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <wsHttpBinding>
        <binding name="Binding">
          <security mode="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>

    <services>
      <service name="Server.InternalClass" behaviorConfiguration="NewBehaviour">
        <endpoint address="IInternal" binding="wsHttpBinding" bindingConfiguration="Binding" contract="Common.IInternal">
          <identity>
            <dns value="MyMachine"/>
          </identity>
        </endpoint>
       <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> 
        <host>
          <baseAddresses>
            <add baseAddress="https://MyMachine:8733/"/>
          </baseAddresses>
        </host>
      </service>
    </services>
  </system.serviceModel>


</configuration>
Run Code Online (Sandbox Code Playgroud)

客户

static ChannelFactory<IInternal> factory = new ChannelFactory<IInternal>(new WSHttpBinding(), new EndpointAddress("https://MyMachine:8733/IInternal"));
Run Code Online (Sandbox Code Playgroud)

当我调用方法factory.CreateChannel()时,我得到错误

我配置证书

在此输入图像描述

Yac*_*sad 6

您必须告诉客户端使用安全传输通道,以便它使用https而不是http.这是正确的,因为客户端的绑定设置必须与服务端的绑定设置相匹配.

您可以通过客户端的app.config文件中的配置来执行此操作,也可以通过以下代码执行此操作:

var ws_http_binding = new WSHttpBinding();

ws_http_binding.Security.Mode = SecurityMode.Transport;

ChannelFactory<IInternal> factory = 
    new ChannelFactory<IInternal>(
        ws_http_binding,
        new EndpointAddress("https://MyMachine:8733/IInternal"));

var channel = factory.CreateChannel();
Run Code Online (Sandbox Code Playgroud)