如何配置wsdl.exe从多个wsdl文件生成单个共享类型文件
使用wsdl.exe从多个WSDL文件生成客户端代理类的操作方案
单WSDL文件可以成功生成代理,说明基础运行环境没有问题,多文件生成失败基本都是参数使用、路径配置、类型冲突类问题,按下面的方法操作即可:
基础命令格式
wsdl.exe原生支持多WSDL输入,不需要分开多次生成再手动拼接代码,直接在命令中传入所有待处理的WSDL文件即可,参考模板:
wsdl.exe /language:C# /namespace:自定义代理类命名空间 /out:输出的代理类文件名.cs 第一个WSDL文件路径 第二个WSDL文件路径 第三个WSDL文件路径 /sharedTypes
关键注意事项
- 必须加
/sharedTypes参数:这是多WSDL生成场景的核心参数,会自动识别不同WSDL里定义的同名、同命名空间共享类型,只生成一份类定义,避免出现重复类的编译错误,这也是绝大多数人多文件生成失败的核心原因。 - 路径格式要合规:如果WSDL文件路径包含空格、中文或者特殊字符,一定要给完整路径包裹英文双引号,避免命令行把路径拆成无效参数,触发找不到文件的错误。
- 优先使用本地文件输入:不要混合传入在线WSDL地址和本地WSDL文件,建议先把所有需要用到的WSDL、以及WSDL内部import引用的所有XSD schema文件全部下载到本地同一个文件夹,修正WSDL里的import相对路径后,全部用本地路径作为参数传入,避免因为网络权限、跨域、远程路径映射错误导致的解析失败。
- 按依赖顺序排列参数:如果WSDL A引用了WSDL B里定义的自定义类型,要把被依赖的WSDL B放在参数列表更靠前的位置,否则解析阶段会报找不到类型定义的错误。
报错排查技巧
执行命令时追加
/parsableerrors参数,会输出带具体文件位置、行号的结构化错误信息,可以直接定位到是哪个WSDL的哪段定义存在冲突、缺失或者格式问题,不用对着模糊的通用报错反复试错。
如果部分WSDL之间没有任何共享类型,也可以单独给每个WSDL生成独立的代理类文件,放到同一个命名空间下使用,只是这种方式会生成多份重复的通用类定义,不如加/sharedTypes参数一次性生成的代码整洁。
内容的提问来源于stack exchange,提问作者Aԃιƚყα Gυɾαʋ
相关产品推荐
相关产品推荐

