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


Проверка клиента

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

Служба предоставляет четыре конечных точки службы. Первая конечная точка использует WSDualHttpBinding, вторая конечная точка использует проверку подлинности NTLM, третья конечная точка включает поток транзакций, а четвертая конечная точка использует проверку подлинности на основе сертификатов.

Клиент использует MetadataResolver класс для получения метаданных службы. Клиент применяет политику запрета дуплексных привязок, проверки подлинности NTLM и потока транзакций с использованием валидирующего поведения. Для каждого экземпляра ServiceEndpoint, импортированного из метаданных службы, клиентское приложение добавляет экземпляр поведения конечной точки InternetClientValidatorBehavior в ServiceEndpoint перед тем, как использовать клиент WCF для подключения к конечной точке. Метод поведения Validate выполняется перед вызовом любых операций в службе и принудительно применяет политику клиента путем вызова InvalidOperationExceptions.

Создание примера

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

Запуск примера на том же компьютере

  1. Откройте командную строку разработчика для Visual Studio с правами администратора и запустите Setup.bat из образца папки установки. При этом устанавливаются все сертификаты, необходимые для выполнения примера.

  2. Запустите приложение-службу из \service\bin\Debug.

  3. Запустите клиентское приложение из \client\bin\Debug. Действие клиента отображается в клиентском консольном приложении.

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

  5. Удалите сертификаты, выполнив Cleanup.bat после завершения работы с образцом. Другие примеры безопасности используют те же сертификаты.

Для запуска примера на нескольких компьютерах

  1. На сервере откройте командную строку разработчика для Visual Studio с правами администратора, затем введите setup.bat service. При выполнении setup.bat с аргументом service создается сертификат службы с полным доменным именем компьютера и экспортируется сертификат службы в файл с именем Service.cer.

  2. На сервере измените App.config, чтобы отразить новое имя сертификата. То есть измените атрибут findValue элемента <serviceCertificate> на полное доменное имя компьютера.

  3. Скопируйте файл Service.cer из каталога службы в клиентский каталог на клиентском компьютере.

  4. На клиенте откройте командную строку разработчика для Visual Studio с правами администратора и введите setup.bat client. При запуске setup.bat с аргументом client создается клиентский сертификат с именем Client.com и экспортируется в файл с именем Client.cer.

  5. В файле client.cs измените значение адреса конечной точки MEX и findValue для задания сертификата сервера по умолчанию для соответствия новому адресу службы. Для этого замените localhost полным доменным именем сервера. Повторная сборка.

  6. Скопируйте файл Client.cer из клиентского каталога в каталог службы на сервере.

  7. На клиенте запустите ImportServiceCert.bat в командной строке разработчика для Visual Studio, открывшейся с правами администратора. При этом сертификат службы импортируется из файла Service.cer в хранилище CurrentUser — TrustedPeople.

  8. На сервере запустите ImportClientCert.bat в командной строке разработчика для Visual Studio, открывшейся с правами администратора. При этом сертификат клиента импортируется из файла Client.cer в хранилище LocalMachine — TrustedPeople.

  9. На компьютере службы создайте проект службы в Visual Studio и запустите service.exe.

  10. На клиентском компьютере запустите client.exe.

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

Очистка после образца

  • Запустите Cleanup.bat в папке примеров после завершения работы примера.

    Замечание

    Этот скрипт не удаляет сертификаты службы на клиенте при запуске этого примера на компьютерах. Если вы запускали примеры WCF, использующие сертификаты на разных компьютерах, обязательно удалите сертификаты службы, установленные в хранилище CurrentUser-TrustedPeople. Для этого используйте следующую команду: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>. For example: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com

См. также