Практическое руководство. Использование моникера службы 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
будет возвращена ошибка "Синтаксическая ошибка". При получении этой ошибки убедитесь, что используется правильный моникер, а служба доступна.