Как использовать моникер службы 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="https://servername/Affiliates/service.svc/mex",
address="https://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 будет возвращена ошибка "Синтаксическая ошибка". При получении этой ошибки убедитесь, что используется правильный моникер, а служба доступна. |