Предоставленная схема URI 'http' недействительна; ожидаемый «https». Имя параметра - PullRequest
0 голосов
/ 08 января 2020

я прошел через несколько предыдущих вопросов, но мне кажется, что где-то не хватает, так как WCF для меня совершенно новый.

web.config в приложении службы WCF

  <service behaviorConfiguration="BehaviourName" name="ProjectName.ServiceName">
    <endpoint address="" binding="basicHttpBinding" contract="ProjectName.IServiceName">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    <host>
      <baseAddresses>
        <add baseAddress="https://aaa.bbbbbb.com/IISDeployedFolderName"/>
      </baseAddresses>
    </host>
  </service>
  ....................
  .....................

  <behavior name="BehaviourName">
    <serviceMetadata httpGetEnabled="true" />
    <serviceDebug includeExceptionDetailInFaults="false" />
  </behavior>
  ............................
  ..........................
  <basicHttpBinding>
    <binding name="secureHttpBinding">
      <security mode="Transport">
        <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
        <message clientCredentialType="Certificate" algorithmSuite="Default" />
      </security>
    </binding>
  </basicHttpBinding>
  ..........................
  .........................
  <protocolMapping>
    <add binding="basicHttpBinding" scheme="https" />
  </protocolMapping>
  ............................
  ..............................

В приложении MVC другое приложение использует код службы выше.

добавлена ​​ссылка на службу с настройками по умолчанию и автоматически сгенерированный адрес конечной точки с http, если я изменяю его на https, он ломается с ошибкой.

1 Ответ

1 голос
/ 09 января 2020

В WCF нам следует настроить дополнительную конечную точку службы для протокола HTTPS, для которого требуется режим безопасности транспортного уровня.

    <services>
      <service name="WcfService1.Service1">
        <!--please pay attention to that apply the binding configuration by means of bindingConfiguration property.-->
        <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1" bindingConfiguration="mybinding"></endpoint>
        <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="mybinding">
          <security mode ="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </basicHttpBinding>
</bindings>

Приведенная ниже конфигурация поддерживает протокол HTTP и протокол HTTPS.

  <system.serviceModel>
    <services>
      <service name="WcfService1.Service1">
        <!--please pay attention to that apply the binding configuration by means of bindingConfiguration property.-->
        <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1" bindingConfiguration="mybinding"></endpoint>
        <endpoint address="" binding="basicHttpBinding" contract="WcfService1.IService1"></endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="mybinding">
          <security mode ="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
  </system.serviceModel>

Мы также можем использовать секцию ProtocolMapping для упрощения конфигурации. Приведенная ниже конфигурация поддерживает протоколы HTTP и HTTPS.

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpsGetEnabled="true" httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
    <protocolMapping>
      <add binding="basicHttpBinding" scheme="http"/>
      <add binding="basicHttpsBinding" scheme="https"/>
    </protocolMapping>
  </system.serviceModel>

Официальный документ.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/simplified-configuration
Не стесняйтесь сообщить мне, если я чем-нибудь могу помочь с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...