Вы читаете вторую часть:

Предыдущая часть описывала простейший пример создания службы (service) WCF и её вызова из клиентского приложения. В этой части вы сможете узнать, как можно достичь точно такого же результата, но теперь мы будем настраивать всё вручную. Таким образом, мы переопределим (override) стандартные конечные точки, настроим наши собственные, и в итоге получим точно такое же поведение нашего приложения.
Идея заключается в том, что бы вы поняли, что делает WCF и что вы можете сделать это самостоятельно. Кроме того, предыдущие версии .NET фреймворка не поддерживают стандартные конечные точки, и это означает, что решение, которое мы получим в конце этой статьи, будет также работать и в Visual Studio 2008.
Что мы будем делать?
Мы начнем сразу с третьего пункта просто потому, что здесь у нас уже почти всё готово. Решение из предыдущего поста содержало следующую конфигурацию приложения (application configuration) для приложения ConsoleHost.
Поведение службы не имеет названия, что делает его стандартным для всех служб в WCF4. Все, что нам нужно сделать, это задать ему имя. Измените строку 6 следующим образом:
Теперь мы добавим первую конечную точку, используя BasicHttpBinding. Прямо под <system.serviceModel> мы добавим тег <services /> и добавим нашу службу. Оставив все значения пустыми, мы получим следующее:
Теперь нам нужно заполнить пробелы. Более подробную информацию можно найти в статьях о WCF ABC и размещении службы (hosting the service).
Конечная точка MEX требует настроенного поведения метаданных, но мы вернемся к этому позже. Для начала нам необходимо добавить конечную точку. Снова WCF ABC, адрес, привязка и контракт.
Теперь нам осталось только добавить поведение метаданных. Это делается в теге объявления службы, рядом с её именем. Добавляем атрибут behaviorConfiguration и указываем имя нашей конфигурации поведения: MyBehavior.
В итоге, мы получили следующую конфигурацию:
Вы можете скачать решение для Visual Studio 2010 и Visual Studio 2008 прямо здесь.
- Создание простейшего решения (solution) со стандартными конечными точками (default endpoints)
- Добавление и настройка конечных точек вручную

Предыдущая часть описывала простейший пример создания службы (service) WCF и её вызова из клиентского приложения. В этой части вы сможете узнать, как можно достичь точно такого же результата, но теперь мы будем настраивать всё вручную. Таким образом, мы переопределим (override) стандартные конечные точки, настроим наши собственные, и в итоге получим точно такое же поведение нашего приложения.
Идея заключается в том, что бы вы поняли, что делает WCF и что вы можете сделать это самостоятельно. Кроме того, предыдущие версии .NET фреймворка не поддерживают стандартные конечные точки, и это означает, что решение, которое мы получим в конце этой статьи, будет также работать и в Visual Studio 2008.
Что мы будем делать?
- Добавим конечные точки BasicHttpBinding
- Добавим конечные точки MEX
- Добавим поведение метаданных (Metadata behavior)
Поведение метаданных
Мы начнем сразу с третьего пункта просто потому, что здесь у нас уже почти всё готово. Решение из предыдущего поста содержало следующую конфигурацию приложения (application configuration) для приложения ConsoleHost.
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <system.serviceModel>
- <behaviors>
- <serviceBehaviors>
- <behavior>
- <serviceMetadata httpGetEnabled="True"/>
- </behavior>
- </serviceBehaviors>
- </behaviors>
- </system.serviceModel>
- </configuration>
* This source code was highlighted with Source Code Highlighter.
Поведение службы не имеет названия, что делает его стандартным для всех служб в WCF4. Все, что нам нужно сделать, это задать ему имя. Измените строку 6 следующим образом:
- <behavior name="MyBehavior">
* This source code was highlighted with Source Code Highlighter.
Добавление конечной точки BasicHttpBinding
Теперь мы добавим первую конечную точку, используя BasicHttpBinding. Прямо под <system.serviceModel> мы добавим тег <services /> и добавим нашу службу. Оставив все значения пустыми, мы получим следующее:
- <services>
- <service name="">
- <endpoint
- address=""
- binding=""
- contract="" />
- </service>
- </services>
* This source code was highlighted with Source Code Highlighter.
Теперь нам нужно заполнить пробелы. Более подробную информацию можно найти в статьях о WCF ABC и размещении службы (hosting the service).
- Name
Это немного сбивает с толку, но вы не можете просто ввести любое имя, на самом деле это тип службы.
Здесь мы должны указать полное имя реализации (implementation) нашей службы. То есть не интерфейса, а класса. В нашем случае имя класса EmailValidator, но его полное название включает пространство имен, что в итоге приводит к EmailService.EmailValidator. - Address
Адрес мы не обязаны заполнять, потому что базовый адрес (base address) в нашем коде уже определяет его. Вы также можете определить его в конфигурации, об этом вы можете прочитать в посте об адресе. - Binding
Привязка (binding) — просто basicHttpBinding. Обратите внимание на верблюжью нотацию (camelCasing). - Contract
Здесь мы должны указать контракт, которым является наш интерфейс. Как и в случае с атрибутом Name, необходимо ввести полное имя, в нашем случае: EmailService.IEmailValidator.
Добавление конечной точки MEX
Конечная точка MEX требует настроенного поведения метаданных, но мы вернемся к этому позже. Для начала нам необходимо добавить конечную точку. Снова WCF ABC, адрес, привязка и контракт.
- Address
Поскольку мы не можем указать для этой конечной точки тот же адрес, что и для конечной точки BasicHttpBinding, мы введём здесь «mex». - Binding
Здесь всё просто: mexHttpBinding - Contract
Тут тоже всё просто, хотя и немного странно, контракт ДОЛЖЕН быть IMetadataExchange. Не полное имя или какое-нибудь другое, он просто должен быть именно таким.
Включение (enabling) поведения метаданных
Теперь нам осталось только добавить поведение метаданных. Это делается в теге объявления службы, рядом с её именем. Добавляем атрибут behaviorConfiguration и указываем имя нашей конфигурации поведения: MyBehavior.
Итоговый результат
В итоге, мы получили следующую конфигурацию:
- <?xml version="1.0" encoding="utf-8" ?>
- <configuration>
- <system.serviceModel>
- <services>
- <service name="EmailService.EmailValidator" behaviorConfiguration="MyBehavior">
- <endpoint
- address=""
- binding="basicHttpBinding"
- contract="EmailService.IEmailValidator" />
- <endpoint
- address="mex"
- binding="mexHttpBinding"
- contract="IMetadataExchange" />
- </service>
- </services>
- <behaviors>
- <serviceBehaviors>
- <behavior name="MyBehavior">
- <serviceMetadata httpGetEnabled="True"/>
- </behavior>
- </serviceBehaviors>
- </behaviors>
- </system.serviceModel>
- </configuration>
* This source code was highlighted with Source Code Highlighter.
Вы можете скачать решение для Visual Studio 2010 и Visual Studio 2008 прямо здесь.