Пользовательские критерии поиска
В этом образце показано, как создать логику сопоставления пользовательских областей и реализовать пользовательскую службу обнаружения. Клиенты используют функции сопоставления пользовательских областей, чтобы расширить функции поиска, предоставляемые системой WCF Discovery. В этом образце реализован следующий сценарий.
Клиент ищет службу калькулятора.
Чтобы уточнить поиск, клиент должен использовать правило сопоставления пользовательских областей.
Согласно этому правилу, служба отвечает клиенту, если ее конечная точка совпадает с любой из областей, указанных клиентом.
Демонстрации
Создание пользовательской службы обнаружения.
Реализация сопоставления пользовательских областей по алгоритму.
Обсуждение
Клиент проверяет критерии сопоставления типов по правилу ИЛИ. Служба отвечает, если области в ее конечных точках совпадают с любыми из областей, предоставленных клиентом. В этом случае клиент ищет службу калькулятора, любая из областей которой принадлежит следующему списку.
net.tcp://Microsoft.Samples.Discovery/RedmondLocation
net.tcp://Microsoft.Samples.Discovery/SeattleLocation
net.tcp://Microsoft.Samples.Discovery/PortlandLocation
Для этого клиент направляет службы в правило сопоставления пользовательских областей, передавая пользовательскую область по URI. Чтобы упростить сопоставление пользовательских областей, служба должна использовать пользовательскую службу обнаружения, которая поддерживает правило сопоставления пользовательских областей и в которой реализована соответствующая логика сопоставления.
В клиентском проекте откройте файл Program.cs. Заметьте, что в поле ScopeMatchBy
объекта FindCriteria
задается определенный URI. Этот идентификатор отправляется в службу. Если служба не поддерживает это правило, то она не обрабатывает клиентский запрос поиска.
Откройте проект службы. Для реализации пользовательской службы обнаружения используются три файла.
AsyncResult.cs: это реализация класса
AsyncResult
, который необходим для методов обнаружения.CustomDiscoveryService.cs: в этом файле реализуется пользовательская служба обнаружения. В реализации расширяется класс DiscoveryService и переопределяются необходимые методы. Обратите внимание на реализацию метода OnBeginFind. Метод проверяет, задано ли клиентом правило сопоставления пользовательских областей. Это тот же пользовательский URI, который клиент указывал ранее. Если указано пользовательское правило, выполняется ветвь кода, в которой реализована логика сопоставления по правилу ИЛИ.
Эта пользовательская логика проходит по всем областям в каждой из конечных точек, входящих в службу. Если области конечной точки совпадают с любыми из областей, указанных клиентом, служба обнаружения добавляет конечную точку в ответ, который отправляется обратно клиенту.
CustomDiscoveryExtension.cs: последним этапом в реализации службы обнаружения является подключение этой реализации пользовательской службы обнаружения к узлу службы. Здесь используется вспомогательный класс
CustomDiscoveryExtension
. Этот класс расширяет класс DiscoveryServiceExtension. Пользователь должен переопределить метод GetDiscoveryService. В этом случае метод возвращает экземпляр пользовательской службы обнаружения, который был создан ранее.PublishedEndpoints
— это коллекция ReadOnlyCollection, которая содержит все конечные точки приложения, которые добавлены в ServiceHost. Пользовательская служба обнаружения использует эту коллекцию для заполнения внутреннего списка. Пользователь может добавлять и другие метаданные конечных точек.
Наконец, откройте файл Program.cs. Заметьте, что в узел добавляются объекты ServiceDiscoveryBehavior и CustomDiscoveryExtension
. После этого, когда в узле есть конечная точка, через которую принимаются сообщения обнаружения, приложение может использовать пользовательскую службу обнаружения.
Заметьте, что клиенту удается найти службу, не зная ее адреса.
Настройка, построение и выполнение образца
Откройте решение, содержащее проект.
Выполните сборку проекта.
Запустите приложение службы.
Запустите клиентское приложение.
![]() |
---|
Образцы уже могут быть установлены на компьютере. Перед продолжением проверьте следующий каталог (по умолчанию).
<диск_установки>:\WF_WCF_Samples
Если этот каталог не существует, перейдите на страницу Образцы Windows Communication Foundation (WCF) и Windows Workflow Foundation (WF) для .NET Framework 4, чтобы загрузить все образцы Windows Communication Foundation (WCF) и WF. Этот образец расположен в следующем каталоге.
<диск_установки>:\WF_WCF_Samples\WCF\Basic\Discovery\CustomFindCriteria
|