Svcutil无法为asmx生成异步方法及GetEndpointAddress的问题排查
Svcutil代码生成问题解决方法
1. 同时生成异步与同步方法
默认使用/async参数只会生成异步方法,要同时保留同步方法,必须添加/sync参数,修改后的命令如下:
svcutil.exe /out:"C:\MyDir\reference.cs" /async /sync /n:*,MyNamespace http://whatever.com/aa.asmx
如果是较新版本的svcutil,若上述参数不生效,可尝试使用更明确的参数名:
svcutil.exe /out:"C:\MyDir\reference.cs" /generateAsync /generateSync /n:*,MyNamespace http://whatever.com/aa.asmx
2. 生成GetEndpointAddress方法
GetEndpointAddress方法是客户端结合配置文件使用时才会自动生成的逻辑,你的命令仅生成了代理类代码,未生成配套配置文件。需要添加/config参数指定配置文件输出路径,修改后的命令:
svcutil.exe /out:"C:\MyDir\reference.cs" /async /sync /config:"C:\MyDir\output.config" /n:*,MyNamespace http://whatever.com/aa.asmx
生成配置文件后,客户端类会依赖配置中的端点信息,自动包含GetEndpointAddress相关处理逻辑。
额外适配ASMX服务的注意点
ASMX属于旧式Web服务,svcutil对其支持与WCF服务有差异,若上述参数仍不生效,可添加/serializer:XmlSerializer参数(ASMX默认使用XmlSerializer):
svcutil.exe /out:"C:\MyDir\reference.cs" /async /sync /serializer:XmlSerializer /config:"C:\MyDir\output.config" /n:*,MyNamespace http://whatever.com/aa.asmx
同时要确保svcutil版本与目标.NET框架版本匹配,不同版本的参数可能存在细微差异。
内容的提问来源于stack exchange,提问作者developer9969
相关产品推荐
相关产品推荐

