Web 服务编译器工具
为了支持服务模型,wsutil.exe会生成要同时在客户端和服务端中使用的标头。 它根据需要为客户端生成 C 代理文件,为服务端生成 C 存根文件。
为了支持 序列化,编译器为全局元素定义的元素说明生成标头,以及代理文件中要由序列化引擎使用的所有类型定义信息。
使用情况
WsUtil.exe [命令行开关 [switch-options]:]<filename>
command-line-开关
指定WsUtil.exe编译器选项。 开关可以按任意顺序显示。 短划线 ('-') 和斜杠 ('/') 被视为相同。
命令行选项列表
- @filename 指定应将输入文件视为响应文件。 此选项可以在参数列表的任何位置多次使用。
- /wsdl:<filename>:<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 为 xsd:string 类型生成 WCHAR* 。 应用程序可以使用此标志覆盖该行为,并改为为 xsd:type 生成WS_STRING。
- /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 编译器仅适用于本地元数据文件。 该工具不支持从正在运行的 Web 服务下载元数据。 开发人员可以使用其他受支持的 Web 服务工具(如 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 结构定义和存根函数原型外,所有其他 Web 服务相关定义都封装在名为 的全局结构中,具有规范化文件名。
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 警告,其中包含严重的可恢复问题。 编译器可以进行,但用户应注意此问题。 例如,如果 wsdl 中存在不影响代码生成的不受支持的属性(例如某些 WSDL 方面),则会生成 W1 警告。
- WsUtil 生成具有不太严重问题的 W2 警告。 功能不会丢失,但应用程序开发人员可能想知道这一点。 喜欢可能不同于其他平台的行为。
- WsUtil 生成 W3 警告,对生成的代码的影响最小。 例如,当规范化字符串不同于原始字符串时,wsutil.exe会生成 W3 警告。
- W4 警告更像是“信息性”警告,WsUtil 在 WSDL 中忽略文档属性等情况下发出 W4。
- WX 指示编译器将警告视为错误。 例如,如果指定了 /W:1 /WX,wsutil 会为所有 W1 警告生成错误。
/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 支持 和 架构支持 部分。