根据服务元数据生成 WCF 客户端

本主题介绍如何使用 Svcutil.exe 中的各种开关,根据元数据文档生成客户端。

元数据文档可以位于持久性存储区中,也可以联机检索。 联机检索遵循 WS-MetadataExchange 协议或 Microsoft 发现 (DISCO) 协议。 Svcutil.exe 同时发出以下元数据请求以检索元数据:

  • 发往所提供地址的 WS-MetadataExchange (MEX) 请求。

  • 发往所提供地址的 MEX 请求,并追加了 /mex

  • 发往所提供地址的 DISCO 请求(使用 ASP.NET Web 服务中的 DiscoveryClientProtocol)。

Svcutil.exe 基于 Web 服务描述语言 (WSDL) 或从服务接收的策略文件生成客户端。 通过将用户名与“@”连接在一起,然后添加完全限定的域名 (FQDN),生成用户主体名称 (UPN)。 但是,对于在 Active Directory 上注册的用户,此格式无效,且该工具生成的 UPN 会导致 Kerberos 身份验证出错,并显示以下错误消息:“登录尝试失败”。若要解决此问题,请手动修复该工具生成的客户端文件。

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

引用和共享类型

选项 说明
/reference:<文件路径> 引用指定程序集中的类型。 在生成客户端时,使用此选项来指定可能包含类型的程序集,这些类型表示所导入的元数据。

缩写形式:/r
/excludeType:<类型> 指定要从引用的协定类型中排除的完全限定或程序集限定类型名称。

缩写形式:/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:<语言> 指定要用于代码生成的编程语言。 提供在 Machine.config 文件中注册的语言名称或从 CodeDomProvider 继承的类的完全限定名称。

值:c#、cs、csharp、vb、vbs、visualbasic、vbscript、javascript、c++、mc、cpp

默认设置:csharp

缩写形式:/l

有关详细信息,请参阅 CodeDomProvider 类。

为客户端选择命名空间

选项 说明
/namespace:<字符串,字符串> 指定从 WSDL 或 XML 架构 targetNamespace 到公共语言运行库 (CLR) 命名空间的映射。 将通配符 (*) 用于 targetNamespace 将映射所有 targetNamespaces,而不显式映射到该 CLR 命名空间。

若要确保消息协定名称不与操作名称相冲突,请用双冒号 (::) 限定类型引用,或者确保名称是唯一的。

默认设置:派生自 DataContracts 的架构文档的目标命名空间。 默认命名空间用于所有其他生成的类型。

缩写形式:/n

选择数据绑定

选项 说明
/enableDataBinding 在所有 INotifyPropertyChanged 类型上实现 DataContract 接口以启用数据绑定。

缩写形式:/edb

生成配置

选项 说明
/config:<配置文件> 指定已生成的配置文件的文件名。

默认设置:output.config
/mergeConfig 将生成的配置合并到现有文件中,而不是覆盖现有文件。
/noConfig 不生成配置文件。

另请参阅