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


Средство компилятора веб-службы

Для поддержки модели службы wsutil.exe создает заголовок для использования как на стороне клиента, так и на стороне службы. При необходимости он создает файл прокси-сервера C для клиента и файл заглушки C для сторон службы.

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

Использование

WsUtil.exe [командная строка-switchs [switch-options]:]<имя файла>

параметры командной строки

Задает параметры компилятора WsUtil.exe. Переключатели могут отображаться в любом порядке. Дефис ('-') и косая черта ('/') обрабатываются как одинаковые.

Список параметров командной строки

  • @filename Указывает, что входной файл должен рассматриваться как файл ответа. Этот параметр можно использовать несколько раз в любом месте списка аргументов.
  • /wsdl:<имя_>файла:<optional_url> Указывает, что входной файл должен рассматриваться как WSDL-файл. Допускается несколько входных данных wsdl, и обрабатываются все указанные wsdl-файлы. Optional_url указывает расположение, из которого были получены метаданные. Если optional_url не указан, Wsutil внутренне создает уникальный URL-адрес. См. также раздел Поддержка политик.
  • /xsd:<filename> Указывает, что входное имя файла должно рассматриваться как файл схемы. Допускается несколько входных данных xsd и обрабатываются все указанные файлы схемы.
  • /wsp:<filename>:<optional_url> Указывает, что входное имя файла должно рассматриваться как метаданные политики. Допускается несколько входных данных wsp и обрабатываются все указанные файлы политики. Optional_url указывает расположение, из которого были получены метаданные. Если optional_url не указан, Wsutil внутренне создает уникальный URL-адрес. Файлы политики игнорируются, если указан флаг /nopolicy. См. также раздел Поддержка политик.
  • /nopolicy Отключить обработку политики.
  • /out:<dirname> — указывает имя каталога для выходных файлов.
  • /noclient Не создавать заглушку на стороне клиента.
  • /noservice Не создавайте заглушку на стороне службы.
  • /prefix:<string> добавляет указанную строку к всем созданным идентификаторам.
  • /fullname Добавляет нормализованное имя файла к созданным идентификаторам. По умолчанию для создания идентификаторов для связанных описаний будет использоваться только имя, указанное в атрибуте name.
  • /string:<WS_STRING>|< WCHAR*> По умолчанию wsutil создает WCHAR* для типа xsd:string. Приложение может использовать этот флаг для перезаписи этого поведения и создает WS_STRING для xsd:type.
  • /help Отображение справочного сообщения
  • /? То же, что и /help
  • Параметры обработки ошибок /W:x. Может иметь значение W:0-W:4 | WX
  • /nologo Не создавайте сведения, относящиеся к компилятору, в выходных данных консоли.
  • /nostamp Не создавайте сведения компилятора о созданных файлах.

По умолчанию компилятор создает следующие файлы для WSDL-файла или WSDL, возвращенные из обмена метаданными:

  • Прокси-сервер клиента ({inputfilename}.c)

  • Заглушка службы ({inputfilename}.c)

  • Файл заголовка ({inputfilename}.h)

    Корнем созданного имени файла является имя входного файла. Исходные расширения входных файлов сохраняются, чтобы предотвратить конфликт имен файлов для созданных файлов. По умолчанию заглушки клиента и службы создаются в одном файле, а код заглушки службы создается после кода прокси-сервера.

    По умолчанию компилятор создает следующие файлы для XSD-файла для схемы, возвращаемой из обмена метаданными:

  • описания сериализации ({inputfilename}.c)

  • Файл заголовка ({inputfilename}.h)

    Корнем имени файла является имя службы.

Wsutil.exe создает раздел "метка" в начале всех созданных файлов с указанием параметра компилятора, версии средства, применимого параметра командной строки и т. д. Этот раздел можно отключить с помощью параметра /nostamp, чтобы избежать шума при сравнении созданных файлов.

Wsutil не поддерживает скачивание метаданных

Компилятор Wsutil работает только из локального файла метаданных. Средство не поддерживает скачивание метаданных из запущенных веб-служб. Разработчики могут использовать другие поддерживаемые средства веб-службы, например svcutil, для скачивания метаданных на локальный компьютер, проверки сохраненных файлов и передачи этих файлов в wsutil.exe для компиляции.

Поддержка нескольких входных и выходных файлов

WSDL и XML-схемы позволяют включать и импортировать определения из других пространств имен, указанных в другом расположении или файлах. Wsutil поддерживает несколько входных данных schema/wsdl/policy и создает один набор заглушки или заголовка для каждого входного файла. Wsutil не выполняет инструкции include и import. Вместо этого приложение должно передавать файлы, содержащие все необходимые пространства имен, в wsutil, чтобы средство решал все зависимости во время компиляции.

WsUtil.exe /xsd:stockquote.xsd /wsdl:stockquote.wsdl /wsdl:stockquoteservice.wsdl

wsutil создает три набора выходных файлов:

  • stockquote.xsd.c stockquote.xsd.h
  • stockquote.wsdl.c stockquote.wsdl.h
  • stockquoteservice.wsdl.h stockquoteservices.wsdl.c

Формат выходных файлов

Для каждого выходного файла wsutil создает внешне доступные определения в файле заголовка. Помимо определений структуры C и прототипов функций-заглушок, все остальные определения, связанные с веб-службами, инкапсулируются в глобальную структуру с нормализованным именем файла.

typedef struct _stockquote_wsdl {
  struct {
  ... // list of WS_STRUCT_DESCRIPTION for all global complex types.
  } globalTypes;
  struct {
  ... // WS_ELEMENT_DESCRIPTION for all global elements.
  } globalElements;
  struct {
  ...
  } messages;
  struct {
  ...
  } contracts;
} _stockquote_wsdl;

EXTERN_C _stockquote_wsdl stockquote_wsdl;

Обратите внимание, что для глобальной структуры создаются не все поля. Поле верхнего уровня создается только в том случае, если связанные определения указаны во входном файле. Например, для XSD-файлов не создаются поля сообщений, операций и контрактов.

Уровни предупреждений и уровень ошибок

Как и компилятор C, WsUtil.exe поддерживает четыре уровня предупреждений и один уровень ошибки:

  • WsUtil.exe создает ошибки с неустранимыми сбоями, такими как недопустимый WSDL-файл, недопустимые параметры компилятора и т. д.
  • WsUtil создает предупреждения W1 с серьезными проблемами, которые можно восстановить. Компилятор может продолжаться, но пользователь должен знать о проблеме. Например, предупреждение W1 будет создано, если в wsdl есть неподдерживаемые атрибуты, такие как некоторые аспекты WSDL, которые не влияют на создание кода.
  • WsUtil создает предупреждения W2 с менее серьезными проблемами. Функциональность не потеряна, но разработчик приложений может захотеть это знать. Аналогично поведению, которое может отличаться от других платформ.
  • WsUtil создает предупреждения W3 с минимальным влиянием на созданный код. Например, wsutil.exe создает предупреждение W3, если нормализованная строка отличается от исходной строки.
  • Предупреждение W4 больше похоже на "информационные" предупреждения, а WsUtil выдает W4 в таких случаях, как игнорирование атрибута документации в WSDL.
  • WX указывает, что компилятор обрабатывает предупреждение как ошибку. Например, wsutil создает ошибку для всех предупреждений W1, если указан параметр /W:1 /WX.

/W:{N} указывает, какой уровень предупреждающего сообщения следует создать. /W:1 означает, что предупреждения уровня 1 должны создаваться, а предупреждения уровня предупреждений 2 и ниже должны маскироваться, а не создаваться средством.

/Fullname

Этот параметр указывает, что WsUtil.exe создает полное имя для идентификаторов, чтобы избежать потенциального конфликта имен. Например, в example.xsd мы имеем:

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://Example.org" 
xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" targetNamespace="http://Example.org" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
 <wsdl:types>
  <xs:element name="SimpleStruct">
   <xs:complexType>
    <xs:sequence>
     <xs:element name="a" type="xs:int" />
     <xs:element name="b" type="xs:int" />
    </xs:sequence>
   </xs:complexType>
  </xs:element>
 </wsdl:types>
</wsdl:definitions>

По умолчанию WsUtil.exe создает:

typedef struct SimpleStruct {
  int a;
  int b;
};

Но если указан параметр командной строки /fullname, WsUtil.exe создает следующее определение структуры:

typedef struct exmaple_xsd_SimpleStruct {
  int a;
  int b;
};

Глобализация

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

Переменная среды

WsUtil.exe не использует переменные среды.

Не зависит от платформы

Выходные файлы из WsUtil.exe не зависят от платформы. В заглушку не создается зависимый от архитектуры код; Компилятор C позаботится о любой конкретной архитектуре. Заглушку можно использовать на всех поддерживаемых нами платформах.

Описание wsutil.exe выходных данных можно найти в разделе Поддержка WSDL и Поддержка схемы .