我正在使用 svcutil a la 使用预定义的 wsdl:
svcutil some_service.wsdl
生成的方法之一具有以下签名:
[System.ServiceModel.OperationContractAttribute(Action="http://ws.example.org/SubmitData", ReplyAction="*")]
SubmitDataResponse SubmitData( SubmitDataRequest request )
虽然 VS2010/.net35 中的 scvutil 仅生成上述内容,并且 VS 启动服务没有问题,但 VS2012/.net45 中的 svcutil 程序也会生成带有签名的方法
[System.ServiceModel.OperationContractAttribute(Action="http://ws.example.org/SubmitData", ReplyAction="*")]
Task<SubmitDataResponse> SubmitDataAsync( SubmitDataRequest request );
这会导致运行时异常:
System.InvalidOperationException:在同一个合约中不能有两个同名的操作,MyType 类型的 SubmitDataAsync 和 SubmitData 方法违反了此规则。您可以通过更改方法名称或使用 OperationContractAttribute 的 Name 属性来更改其中一项操作的名称。
我可以通过删除 Async 附加方法或简单地使用 VS2010 中的 svcutil 来解决此问题。但我想知道为什么 svcutil 会生成一个导致运行时异常的接口(这是一个错误吗?),以及我是否应该做一些额外的事情来使它工作。