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


Практическое руководство. Использование моникера службы Windows Communication Foundation без регистрации

Чтобы подключиться к службе Windows Communication Foundation (WCF), клиентское приложение WCF должно иметь сведения об адресе службы, конфигурации привязки и контракте службы.

Моникер службы WCF обычно получает необходимый контракт с помощью предварительной регистрации необходимых типов атрибутов, но могут возникнуть случаи, когда это невозможно. Вместо регистрации моникер может получать определение контракта в виде документа на языке WSDL - путем использования параметра wsdl или с помощью обмена метаданными (MEX), путем использования параметра mexAddress.

Это делает возможной реализацию таких сценариев, как распространение электронной таблицы Excel, в которой значения некоторых ячеек вычисляются посредством взаимодействия с веб-службой. В подобном сценарии может быть нецелесообразным регистрировать сборку контракта службы на всех клиентах, которые могут открывать документ. Параметр wsdl или параметр mexAddress позволяет получить автономное решение.

Примечание.

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

Пример

В этом примере показано использование моникера службы в сочетании с контрактом MEX. Служба со следующим контрактом предоставляется посредством привязки wsHttpBinding.

using System.ServiceModel;  
  
// ...
  
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Demo")]  
public interface IAffiliate  
{  
    [OperationContract]  
    bool NewAffiliate(string ID, string company, string fullname, string accountsCode);  
    [OperationContract]  
    bool RemoveAffiliate(string ID);  
    [OperationContract]  
    double RevenueCheckMonthly(ref string ID);  
    [OperationContract]  
    double RevenueCheckTotal(ref string ID);  
}  

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

service4:mexAddress="http://servername/Affiliates/service.svc/mex",  
address="http://servername/Affiliates/service.svc",  
contract=IAffiliate, contractNamespace=http://Microsoft.ServiceModel.Demo,  
binding=WSHttpBinding_IAffiliate, bindingNamespace=http://tempuri.org/  

В ходе выполнения клиентского приложения клиент выполняет обмен данными WS-MetadataExchange с переданным параметром mexAddress. В результате могут быть возвращены сведения об адресе, привязке и контракте для ряда служб. Параметры address, contract, contractNamespace, binding и bindingNamespace используются для идентификации требуемой службы. После сопоставления этих параметров моникер создает клиент WCF с соответствующим определением контракта и вызовами можно будет выполнять с помощью клиента WCF, как и с типизированным контрактом.

Примечание.

Если моникер сформирован неправильно или служба недоступна, при вызове метода GetObject будет возвращена ошибка "Синтаксическая ошибка". При получении этой ошибки убедитесь, что используется правильный моникер, а служба доступна.

См. также