NetHttpBinding

В образце привязки NetHttpBinding показано, как реализовать привязку, которая помещает элемент HttpTransportBindingElement или HttpsTransportBindingElement в стек поверх элемента BinaryMessageEncodingBindingElement. Системные привязки на базе протокола HTTP, входящие в состав Windows Communication Foundation (WCF), например BasicHttpBinding или WsHttpBinding, помещают протокол HTTP поверх TextMessageEncodingBindingElement в первую очередь для того, чтобы разрешить отправку и получение сообщений в текстовом формате и формате XML, тем самым сделав возможным взаимодействие. Системные привязки на базе протокола TCP и именованных каналов, входящие в состав Windows Communication Foundation (WCF), например NetTcpBinding или NetNamedPipeBinding, записывают и принимают сообщения в двоичном формате. Двоичный формат, хотя он и не поддерживает взаимодействие, является более эффективным и используется для повышения производительности.

Aa395198.note(ru-ru,VS.100).gifПримечание
Процедура настройки и инструкции по построению для этого образца приведены в конце этого раздела.

Aa395198.Important(ru-ru,VS.100).gif Примечание
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).

<диск_установки>:\WF_WCF_Samples

Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.

<диск_установки>:\WF_WCF_Samples\WCF\Extensibility\Binding\NetHttpBinding

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

  1. Определите, какие из элементов привязки необходимо объединить в стек, чтобы создать привязку.

  2. Убедитесь, что известен порядок, в котором элементы привязки следует объединять в стек, чтобы этот стек работал правильно. Например, элемент транспорта можно поместить в нижнюю часть стека.

  3. Создайте класс Binding, наследующий классу Binding. В данном конкретном случае класс NetHttpBinding также реализует интерфейс ISecurityCapabilities, поскольку при этом пользователь этой привязки получает возможность проверять ProtectionLevel и определять, поддерживает ли привязка проверку подлинности клиента и сервера.

  4. У привязки имеются и другие свойства, доступ к которым необходимо предоставить пользователям, чтобы они могли настраивать элементы привязки. Например, делается доступным свойство BypassProxyOnLocal, чтобы можно было настраивать аналогичное свойство соответствующего элемента TransportBindingElement HTTP или HTTPS.

  5. В методе CreateBindingElements в этом образце показан порядок, в котором элементы привязки должны объединяться в стек. Например, сначала этот метод добавляет кодировщик, а затем транспорт, поскольку транспорт должен находиться внизу стека привязки.

  6. Наконец, реализуется метод ApplyConfiguration, чтобы привязку NetHttpBinding можно было заполнять с помощью конфигурации. На самом деле имеется несколько других классов, необходимых для поддержки настройки привязки с помощью файла конфигурации. Для создания этих классов можно использовать средство ConfigurationCodeGenerator. Средство ConfigurationCodeGenerator также доступно в виде образца WCF.

Образец службы NetHttpBinding

Образец службы, использующей привязку NetHttpBinding, расположен в подкаталоге службы. Привязка, которая используется для настройки конечной точки, называется NetHttpBinding. Образец службы размещается резидентно с использованием метода Main, но его можно также размещать и в службах IIS.

Образец клиента NetHttpBinding

Для подключения к службе клиент также использует привязку NetHttpBinding. Клиент показывает, что привязку можно задавать как с помощью кода, так и с помощью файла конфигурации. Настройка привязки NetHttpBinding возможна с помощью файла конфигурации, поскольку были добавлены соответствующие классы, делающие привязку доступной через конфигурацию. Как было сказано ранее, для создания этих классов можно использовать средство ConfigurationCodeGenerator.

Настройка и построение образца

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

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

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

  4. Убедитесь, что путь включает папку, в которой хранится файл Makecert.exe.

  5. На компьютере, на котором будет работать сервер, запустите из папки установки образца файл Setup.bat, чтобы создать сертификат сервера и сертификат его издателя, необходимые серверу.

  6. На том же компьютере сервера настройте сертификат сервера с помощью файла HTTP.SYS, воспользовавшись для этого инструкциями в основном документе из раздела Настройка HTTP и HTTPS.

Выполнение образца на одном компьютере

  1. Запустите программу Service.exe из папки service\bin. Действия службы отображаются в окне консоли службы.

  2. Запустите программу Client.exe из \client\bin. Действия клиента отображаются в консольном приложении клиента.

  3. После завершения работы образца запустите файл Cleanup.bat, чтобы удалить сертификаты.

Выполнение образца на нескольких компьютерах

  1. Запустите программу Service.exe из папки service\bin. Действия службы отображаются в окне консоли службы.

  2. Поскольку сервер размещается резидентно, необходимо указать удостоверение в файле App.config клиента, если клиент и сервер выполняются от имени пользователей домена:

         <client>
           <endpoint
              name="EchoServer"
              address=
              http://localhost:8000/TestService/BinaryEncoderOverHTTP
              binding=
              "netHttpBinding" bindingConfiguration="netHttpBinding"
              contract=
              "Microsoft.ServiceModel.Samples.Client.IEchoService" >
              <identity>
                 <userPrincipalName value="user_name@service_domain"/>
              </identity>
           </endpoint>
         </client>
    
  3. Запустите файл Client.exe из папки \client\bin. В качестве параметра командной строки передайте URL-адрес HTTPS, который отображается в окне службы. Действия клиента отображаются в консольном приложении клиента.

  4. После завершения работы образца запустите файл Cleanup.bat, чтобы удалить сертификаты.