перейти на https в c# службе WF C - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть c# собственный веб-сервис с конечной точкой http. Все отлично работает, теперь я хотел бы перенести его в HTTPS. У меня есть сертификат, как я могу это сделать? Tnx

Это мой app.config:

  <system.serviceModel>
<services>
  <service name="XWebServiceLib.XWebService" behaviorConfiguration="XWebServiceBehave">
    <host>
      <baseAddresses>
        <add baseAddress="http://10.82.80.21:80/XWebService"/> 
      </baseAddresses>
    </host>
    <endpoint address="http://10.82.80.21:80/XWebService" binding="basicHttpBinding" bindingNamespace="http://10.82.80.21:80/XWebService" contract="XWebServiceLib.IXWebService"/>
    <endpoint address="mex" binding="mexHttpBinding" bindingNamespace="http://10.82.80.21:80/XWebService" contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="XWebServiceBehave">
      <serviceMetadata httpGetEnabled="true"/>
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

И вот как я запускаю свой веб-сервис:

            var instance = new XWebService();

            svcHost = new ServiceHost(instance);                
            svcHost.Open();

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Если указанная выше конфигурация работает нормально, достаточно изменить тип привязки для включения Https.
Нам нужно изменить режим безопасности привязки basichttp на режим безопасности транспорта.

   <system.serviceModel>
    <services>
      <service name="XWebServiceLib.XWebService" behaviorConfiguration="XWebServiceBehave">
        <host>
        </host>
        <endpoint address="https://10.82.80.21:80/XWebService" binding="basicHttpBinding" bindingConfiguration="mybinding" bindingNamespace="http://10.82.80.21:80/XWebService" contract="XWebServiceLib.IXWebService"/>
        <endpoint address="mex" binding="mexHttpsBinding" bindingNamespace="http://10.82.80.21:80/XWebService" contract="IMetadataExchange"/>
      </service>
    </services>
    <bindings>
      <basicHttpBinding>
        <binding name="mybinding">
          <security mode="Transport">
            <transport clientCredentialType="None"></transport>
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <serviceBehaviors>
        <behavior name="XWebServiceBehave">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

В качестве альтернативы мы может использовать привязку basichttps без применения указанной конфигурации привязки c.

  <system.serviceModel>
    <services>
      <service name="XWebServiceLib.XWebService" behaviorConfiguration="XWebServiceBehave">
        <host>
        </host>
        <endpoint address="https://10.82.80.21:80/XWebService" binding="basicHttpsBinding" bindingNamespace="http://10.82.80.21:80/XWebService" contract="XWebServiceLib.IXWebService"/>
        <endpoint address="mex" binding="mexHttpsBinding" bindingNamespace="http://10.82.80.21:80/XWebService" contract="IMetadataExchange"/>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="XWebServiceBehave">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true"/>
          <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

Впоследствии конечная точка службы Https требует от нас привязки сертификата к указанному порту c.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-configure-a-port-with-an-ssl-certificate
Как правило, мы привязываем сертификат к порту с помощью следующего оператора.

netsh http add sslcert ipport=0.0.0.0:8000 certhash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}

В IIS это может быть выполнено модулем привязки сайта.
https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-configure-an-iis-hosted-wcf-service-with-ssl
Не стесняйтесь сообщать мне, если есть что-то, что я могу помогите.

0 голосов
/ 22 апреля 2020

Я пробую этот параметр, и служба запускается правильно:

<system.serviceModel>
<services>
  <service name="XWebServiceLib.XWebService"  behaviorConfiguration="XWebServiceBehave">
    <host>
      <baseAddresses>
        <add baseAddress="https://xxx.xxxxxxx.xxxxx.it/XWebService"/> 
      </baseAddresses>
    </host>
    <endpoint address="" binding="wsHttpBinding" bindingConfiguration="MyBinding" contract="XWebServiceLib.IXWebService"/>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
  </service>
</services>
<behaviors>
  <serviceBehaviors>
    <behavior name="XWebServiceBehave">
      <serviceMetadata httpsGetEnabled="true"  httpGetEnabled="false" />
      <serviceDebug includeExceptionDetailInFaults="true"/>
      <dataContractSerializer maxItemsInObjectGraph="2147483647"/>
    </behavior>
  </serviceBehaviors>
</behaviors>
<bindings>
  <wsHttpBinding>
    <binding name="MyBinding">
      <security mode="Transport">
      </security>
    </binding>                 
  </wsHttpBinding>
</bindings>

SOAPUI правильно заполняет каждый метод, предоставляемый WebService, но если я вызываю методы, кажется, что они ничего не делают , Есть идеи?

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