Пример использования режима безопасности служб WCF в режиме транспорта (net.tcp) и использования идентификации клиента WCF на основе идентификации Windows.

Демонстрирует

Данный пример не использует алгоритмы ГОСТ в явном виде и создан для удобства понимания примера Пример защиты служб в режиме транспорта (net.tcp) и использовании идентификации на основе сертификатов. .

Исходные тексты

Исходные тексты примера находятся в файле WCF.zip в подкаталоге NetTcp и состоят из клиента (каталог Client), исполняемого модуля службы (каталог SelfHost), модуля службы IIS (каталог IIS). Подробнее см. Сборка, запуск и местоположение примеров WCF.

Как собрать пример

Сборка приммера не требует дополнительных действий, по сравнению с инструкциями по сборке к данной группе примеров, указанных в Сборка, запуск и местоположение примеров WCF.

Как запустить пример

Перед запуском примера необходимо убедиться, что клиент проходит аутентификацию Windows на компьютере на котором будет запущен сервис.

Запуск примера с использованием самостоятельного приложения службы (SelfHost) соответстует инструкции Сборка, запуск и местоположение примеров WCF.

Перед запуском примера с использованием службы IIS следует создать виртуальный каталог ServiceModelSamplesNetTcp как это описано в Сборка, запуск и местоположение примеров WCF. Далее необхоимо убедиться в правильности настройки net.tcp как это описано в Сборка, запуск и местоположение примеров WCF.

Как модифицировать базовый пример до данного

Для модификации клиента, необходимо

  • Модифицировать привязку: изменив секцию configuration\system.serviceModel\bindings\ wsHttpBinding на netTcpBinding, заменив режим безопасности на транспорт и установив идентификацию Windows.

     Copy imageCopy Code
    <netTcpBinding>
        <binding name="NewBinding1">
            <!-- Задаем аудентификацию через Transport -->
            <security mode="Transport">
                <transport clientCredentialType="Windows"/>
            </security>
        </binding>
    </netTcpBinding>
                            
  • Изменить endpoint для указания на модифицированную привязку, изменив тег configuration\system.serviceModel\client\endpoint

     Copy imageCopy Code
    <!--
    <endpoint
        address="net.tcp://localhost/ServiceModelSamplesNetTcp/CalculatorService.svc"
        binding="netTcpBinding"
        bindingConfiguration="NewBinding1"
        contract="ICalculator"
        name="WSHttpBinding_ICalculator"
        behaviorConfiguration="NewBehavior"/>
    -->
    <endpoint
        address="net.tcp://localhost:8000/ServiceModelSamplesNetTcp/CalculatorService.svc"
        binding="netTcpBinding"
        bindingConfiguration="NewBinding1"
        contract="ICalculator"
        name="WSHttpBinding_ICalculator"
        behaviorConfiguration="NewBehavior"/>
                            

Для модификации самостоятельного приложения службы, необходимо внести следующие изменения в код SelfHost.cs

  • Изменить тип класса привязки

    C# Copy imageCopy Code
    NetTcpBinding b = new NetTcpBinding();
                            
  • Установить режим безопасности у данной привязки в транспорт

    C# Copy imageCopy Code
    b.Security.Mode = SecurityMode.Transport;
                            
  • Установить режим идентификации Windows у данной привязки

    C# Copy imageCopy Code
    b.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows;
                            
  • Удалить доступ к метаданным удалив код:

    C# Copy imageCopy Code
    smb.HttpGetEnabled = true;
                            

Для модификации службы IIS необходимо внести следующие изменения в конфигурационный файл web.config

  • Изменить привязку с wsHttpBinding в netTcpBinding в теге configuration\system.serviceModel\bindings установить режим защиты служб в транспортный и установить Windows аутентификацию клиента

     Copy imageCopy Code
    <netTcpBinding>
        <binding name="NewBinding1">
            <security mode="Transport">
                <transport clientCredentialType="Windows"/>
            </security>
        </binding>
    </netTcpBinding>
                            
  • Изменить адрес привязки в теге configuration/system.serviceModel/services/service/endpoint:

     Copy imageCopy Code
    <endpoint 
        address="" 
        binding="netTcpBinding" 
        bindingConfiguration="NewBinding1"
        contract="CryptoPro.Sharpei.WCF.Samples.ICalculator" />
                            

Для возможности запуска всех примеров данной группы (WCF) независимо, по сравнению с базовым примером изменен адрес привязки как в клиента, так и в серверах.

Изменения при переходе от ключей и сертификатов Rsa к ГОСТ

При переходе от ключей Rsa на ГОСТ данный пример не потребует изменений ни в тексте программ ни в конфигурационных файлах.

См. также