Создание клиента WCF из метаданных службы

В этом разделе рассматривается использование различных ключей в Svcutil.exe для формирования клиентов из документов метаданных.

Документы метаданных могут находиться в устойчивом хранилище или извлекаться в оперативном режиме. Извлечение в оперативном режиме происходит либо по протоколу WS-MetadataExchange, либо по протоколу Microsoft Discovery (DISCO). Svcutil.exe одновременно отправляет следующие запросы метаданных для извлечения метаданных:

  • запрос WS-MetadataExchange (MEX) по указанному адресу;

  • запрос MEX с присоединенным ключом /mex по указанному адресу;

  • Запрос DISCO (с помощью DiscoveryClientProtocol веб-служб ASP.NET) к указанному адресу.

Программа Svcutil.exe формирует клиент на основании файла WSDL или файла политики, полученного от службы. Имя субъекта-пользователя (UPN) создается путем объединения имени пользователя с именем @, а затем добавлением полного доменного имени (FQDN). Однако для пользователей, зарегистрированных в Active Directory, этот формат недопустим и имя участника-пользователя, которое создает средство, приводит к сбою проверки подлинности Kerberos со следующим сообщением об ошибке: попытка входа завершилась ошибкой. Чтобы устранить эту проблему, вручную исправьте файл клиента, созданный средством.

svcutil.exe [/t:code]  <metadataDocumentPath>* | <url>* | <epr>  

Ссылки на типы и совместное использование типов

Вариант Описание
/reference:<file path> Ссылается на типы в заданной сборке. При создании клиентов необходимо использовать этот параметр для задания сборок, которые могут содержать типы, представляющие импортируемые метаданные.

Краткая форма: /r
/excludeType:<type> Задает полное имя типа или имя типа с указанием на сборку, который необходимо исключить из ссылочных типов контракта.

Краткая форма: /et

Выбор сериализатора

Вариант Описание
/serializer:Auto Автоматически выбирает сериализатор. Выбираемый сериализатор - DataContract. Если использовать этот сериализатор не удается, используется сериализатор XmlSerializer.

Сокращенная форма: /ser:Auto
/serializer:DataContractSerializer Формирует типы данных, использующих для сериализации и десериализации сериализатор DataContract.

Краткая форма: /ser:DataContractSerializer
/serializer:XmlSerializer Формирует типы данных, использующих для сериализации и десериализации сериализатор XmlSerializer.

Краткая форма: /ser:XmlSerializer
/importXmlTypes Настраивает сериализатор DataContract на импорт типов, отличных от DataContract, в виде типов IXmlSerializable.

Краткая форма: /ixt
/dataContractOnly Формирует код только для типов DataContract. Формируются типы ServiceContract.

Для этого параметра следует задавать только локальные файлы метаданных.

Краткая форма: /dconly

Выбор языка для клиента

Вариант Описание
/language:<language> Задает язык программирования, используемый для создания кода. Необходимо задать либо имя языка, зарегистрированное в файле Machine.config, либо полное имя класса, наследуемого от CodeDomProvider.

Значения: c#, cs, csharp, vb, vbs, visualbasic, vbscript, javascript, c++, mc, cpp

По умолчанию: csharp

Краткая форма: /l

Дополнительные сведения см. в описании класса CodeDomProvider.

Выбор пространства имен для клиента

Вариант Описание
/namespace:<string,string> Задает сопоставление между элементом targetNamespace WSDL или схемы XML и пространством имен среды CLR. При использовании в качестве значения элемента targetNamespace подстановочного знака (*) все элементы targetNamespaces сопоставляются без явного сопоставления данному пространству имен среды CLR.

Чтобы гарантировать, что имя контракта сообщения не конфликтует с именем операции, либо дополните ссылку на тип двойными двоеточиями (::), либо убедитесь, что имена уникальны.

По умолчанию: для типов DataContracts выводится из целевого пространства имен документа схемы. Для всех остальных создаваемых типов используется пространство имен по умолчанию.

Краткая форма: /n

Выбор привязки данных

Вариант Описание
/enableDataBinding Реализует интерфейс INotifyPropertyChanged во всех типах DataContract для включения привязки данных.

Краткая форма: /edb

Формирование конфигурации

Вариант Описание
/config:<configFile> Задает имя файла для формируемого файла конфигурации.

По умолчанию: output.config
/mergeConfig Объединяет созданную конфигурацию с существующим файлом (вместо его перезаписи).
/noConfig Запрещает создавать файлы конфигурации.

См. также