Поделиться через


Пользовательская привязка надежного сеанса через HTTPS

Пример ReliableSessionOverHttps демонстрирует использование транспортной безопасности SSL с надежными сеансами. Функция "Надежные сеансы" реализует протокол обмена сообщениями WS-Reliable. Вы можете получить безопасный надежный сеанс, настроив WS-Security поверх надежных сеансов. Но иногда вы можете вместо этого использовать безопасность транспорта HTTP с SSL.

Детали образца

SSL гарантирует, что сами пакеты защищены. Важно отметить, что это отличается от обеспечения надежной сессии с использованием WS-Secure Conversation.

Чтобы использовать надежный сеанс по протоколу HTTPS, необходимо создать пользовательскую привязку. Этот пример основан на руководстве «Начало работы», которое реализует сервис калькулятора. Пользовательская привязка создается с помощью элемента привязки надежной сессии и <httpsTransport>. Следующая конфигурация является пользовательской привязкой.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <services>
      <service
          name="Microsoft.ServiceModel.Samples.CalculatorService"
          behaviorConfiguration="CalculatorServiceBehavior">
        <!-- use base address provided by host -->
        <endpoint address=""
                  binding="customBinding"
                  bindingConfiguration="reliableSessionOverHttps"
                  contract="Microsoft.ServiceModel.Samples.ICalculator" />
        <!-- the mex endpoint is exposed as http://localhost/servicemodelsamples/service.svc/mex-->
        <endpoint address="mex"
                  binding="mexHttpBinding"
                  contract="IMetadataExchange"/>
      </service>
    </services>

    <bindings>
      <customBinding>
        <binding name="reliableSessionOverHttps">
          <reliableSession />
          <httpsTransport />
        </binding>
      </customBinding>
    </bindings>

    <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
    <behaviors>
      <serviceBehaviors>
        <behavior name="CalculatorServiceBehavior">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="False" />
        </behavior>
      </serviceBehaviors>
    </behaviors>

  </system.serviceModel>

</configuration>

Код программы в примере идентичен службе "Начало работы ". Перед созданием и запуском примера необходимо создать сертификат и присвоить его с помощью Мастера сертификатов веб-сервера. Определение конечной точки и определение привязки в параметрах файла конфигурации позволяет использовать пользовательскую привязку, как показано в следующем примере конфигурации клиента.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>

    <client>
      <!-- this endpoint has an https: address -->
      <endpoint name=""
                address="https://localhost/servicemodelsamples/service.svc"
                binding="customBinding"
                bindingConfiguration="reliableSessionOverHttps"
                contract="Microsoft.ServiceModel.Samples.ICalculator" />
    </client>

      <bindings>
        <customBinding>
          <binding name="reliableSessionOverHttps">
            <reliableSession />
            <httpsTransport />
          </binding>
        </customBinding>
    </bindings>

  </system.serviceModel>

</configuration>

Указанный адрес использует схему https:// .

Так как сертификат, используемый в этом примере, является тестовым сертификатом, созданным с помощью Makecert.exe, при попытке получить доступ к адресу https:, например https://localhost/servicemodelsamples/service.svc, из браузера появляется предупреждение безопасности. Чтобы клиент Windows Communication Foundation (WCF) мог работать с тестовым сертификатом, токлиенту был добавлен дополнительный код для подавления предупреждения безопасности. Этот код и сопутствующий класс не требуются при использовании рабочих сертификатов.

// This code is required only for test certificates like those created by Makecert.exe.
PermissiveCertificatePolicy.Enact("CN=ServiceModelSamples-HTTPS-Server");

При запуске примера запросы и ответы операции отображаются в окне консоли клиента. Нажмите клавишу ВВОД в окне клиента, чтобы завершить работу клиента.

Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714

Press <ENTER> to terminate client.

Настройка, сборка и запуск примера

  1. Установите ASP.NET 4.0 с помощью следующей команды.

    %windir%\Microsoft.NET\Framework\v4.0.XXXXX\aspnet_regiis.exe /i /enable
    
  2. Убедитесь, что вы выполнили процедуру настройки One-Time для образцов Windows Communication Foundation.

  3. Убедитесь, что вы выполнили инструкции по установке сертификата сервера IIS.

  4. Чтобы создать версию решения на C# или Visual Basic .NET, следуйте инструкциям по сборке примеров Windows Communication Foundation .

  5. Чтобы запустить пример в конфигурации с одним или несколькими компьютерами, следуйте инструкциям в запуска примеров Windows Communication Foundation.