Настраиваемые критерии поиска

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

  1. Клиент ищет службу калькулятора.

  2. Чтобы уточнить поиск, клиент должен использовать правило сопоставления настраиваемых областей.

  3. Согласно этому правилу, служба отвечает клиенту, если ее конечная точка соответствует любой из областей, указанных клиентом.

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

  • Создание настраиваемой службы обнаружения.

  • Внедрение сопоставления пользовательской области видимости по алгоритму.

Обсуждение

Клиент ищет критерии соответствия типа OR. Служба отвечает обратно, если области на конечных точках соответствуют любой из областей, предоставляемых клиентом. В этом случае клиент ищет службу калькулятора с любой из областей в следующем списке:

  1. net.tcp://Microsoft.Samples.Discovery/RedmondLocation

  2. net.tcp://Microsoft.Samples.Discovery/SeattleLocation

  3. net.tcp://Microsoft.Samples.Discovery/PortlandLocation

Для этого клиент указывает службам использовать правило сопоставления пользовательской области, передавая соответствие пользовательской области по URI. Чтобы упростить сопоставление настраиваемых областей, служба должна использовать пользовательскую службу обнаружения, которая понимает правило сопоставления настраиваемых областей и реализует связанную логику сопоставления.

В клиентском проекте откройте файл Program.cs. Обратите внимание, что ScopeMatchBy поле FindCriteria объекта имеет определенный универсальный код ресурса (URI). Этот идентификатор отправляется в службу. Если служба не понимает это правило, он игнорирует запрос на поиск клиента.

Откройте проект обслуживания. Три файла используются для реализации пользовательской службы обнаружения:

  1. AsyncResult.cs. Это реализация, требуемая методами AsyncResult обнаружения.

  2. CustomDiscoveryService.cs. Этот файл реализует пользовательскую службу обнаружения. Реализация расширяет DiscoveryService класс и переопределяет необходимые методы. Обратите внимание на реализацию OnBeginFind метода. Метод проверяет, было ли соответствие пользовательской области по правилу, указанному клиентом. Это тот же пользовательский URI, что и ранее указанный клиентом. Если задано настраиваемое правило, следует путь кода, реализующий логику сопоставления "OR".

    Эта настраиваемая логика проходит через все области объектов на каждой конечной точке, которые поддерживает служба. Если любая из областей конечной точки соответствует любой из областей, предоставляемых клиентом, служба обнаружения добавляет ее в ответ, отправляемый клиенту.

  3. CustomDiscoveryExtension.cs. Последний шаг реализации службы обнаружения — подключение этой реализации настраиваемой службы обнаружения к узлу службы. Вспомогательный класс, используемый здесь, является классом CustomDiscoveryExtension . Этот класс расширяет DiscoveryServiceExtension класс. Пользователь должен переопределить GetDiscoveryService метод. В этом случае метод возвращает экземпляр созданной ранее пользовательской службы обнаружения. PublishedEndpoints— это объектReadOnlyCollection<T>, содержащий все конечные точки приложения, которые добавляются в .ServiceHost Пользовательская служба обнаружения использует это для наполнения внутреннего списка. Пользователь также может добавлять другие метаданные конечной точки.

Наконец, откройте Program.cs. Обратите внимание, что как ServiceDiscoveryBehavior, так и CustomDiscoveryExtension добавляются в хост. После того как это будет сделано и хост получит конечную точку для приема сообщений об обнаружении, приложение может использовать пользовательскую службу обнаружения.

Обратите внимание, что клиент может найти службу, не зная его адреса.

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

  1. Откройте решение, содержащее проект.

  2. Создайте проект.

  3. Запустите приложение-службу.

  4. Выполните клиентское приложение