如何在Visual Studio 2022 .NET 6中获取旧ASMX服务的强类型实体?
在.NET 6项目中获取ASMX服务完整强类型实体的解决方案
方法一:使用SvcUtil.exe命令行生成代理类
这是最可靠的方式,能确保完整生成WSDL中的所有强类型:
- 打开Visual Studio 2022的开发者命令提示符(通过开始菜单搜索“Developer Command Prompt for VS 2022”)
- 执行以下命令,替换占位符为你的服务信息:
svcutil.exe http://your-asmx-service-url.asmx?wsdl /language:C# /out:AsmxServiceProxy.cs /namespace:Your.Target.Namespacehttp://your-asmx-service-url.asmx?wsdl:ASMX服务的WSDL地址AsmxServiceProxy.cs:生成的代理类文件名Your.Target.Namespace:代码中要使用的命名空间
- 将生成的
AsmxServiceProxy.cs文件添加到.NET 6项目中 - 安装必要的NuGet包:
System.ServiceModel.Http和System.ServiceModel.Primitives
方法二:调整VS服务引用的生成配置
如果通过VS向导添加引用后类型缺失,可修改配置补全:
- 右键项目中的服务引用,选择配置服务引用
- 在弹出窗口中:
- 确认“序列化程序”选择XmlSerializer(ASMX服务默认使用该序列化器,WCF默认的DataContractSerializer可能遗漏部分类型)
- 勾选生成强类型集合
- 点击“高级”按钮,确保“生成所有可能的类型”相关选项已启用
- 保存配置后,右键服务引用选择更新服务引用
方法三:使用旧版WCF Web Service连接方式
通过Connected Services的旧版选项添加引用,兼容ASMX服务的类型生成:
- 右键项目中的Connected Services,选择添加服务引用
- 在窗口中选择WCF Web Service(旧版),点击“下一步”
- 输入ASMX服务的URL,点击“Go”加载元数据
- 指定命名空间后,点击“高级”,确认勾选生成强类型的相关选项,完成添加
注意事项
- 先验证ASMX服务的WSDL完整性:直接在浏览器访问
http://your-asmx-service-url.asmx?wsdl,确认所有需要的实体类型都已定义 - 若存在命名空间冲突,可在SvcUtil命令中用
/namespace:原WSDL命名空间,你的目标命名空间参数手动映射
内容的提问来源于stack exchange,提问作者Brent
相关产品推荐
相关产品推荐

