.NET 4.5 SvcUtil工具生成具有相同名称(方法和MethodAsync)两个操作(.Ne

2019-06-26 09:21发布

我与消费SvcUtil工具一拉一个预定义的WSDL:

svcutil some_service.wsdl

的产生的方法之一具有如下特征:

[System.ServiceModel.OperationContractAttribute(Action="http://ws.example.org/SubmitData", ReplyAction="*")]
SubmitDataResponse SubmitData( SubmitDataRequest request )

而从VS2010 scvutil / .net35仅生成上述和VS没有问题lanuching服务,则SvcUtil工具程序,它是VS2012 / .net45的一部分还产生方法与签名

[System.ServiceModel.OperationContractAttribute(Action="http://ws.example.org/SubmitData", ReplyAction="*")]
Task<SubmitDataResponse> SubmitDataAsync( SubmitDataRequest request );

这会导致运行时异常:

System.InvalidOperationException:无法在具有相同名称相同的合同两种操作,方法SubmitDataAsync和SubmitData型的MyType违反此规则。 您可以通过改变方法名或使用OperationContractAttribute的名称属性更改操作的一个名称。

我可以通过删除异步附加方法或简单地使用SvcUtil工具VS2010从解决此。 不过,我很奇怪,为什么SvcUtil工具生成,导致运行时异常(这是一个错误吗?),以及是否有额外的东西,我应该做的,使其工作的接口。

Answer 1:

默认的行为似乎已经改变了。 如果你提供/ syncOnly参数保留它原来的行为对我来说。

 /syncOnly                          - Generate only synchronous method
                                  signature. Default: generate synchronous
                                  and task-based asynchronous method
                                  signatures.


文章来源: .Net 4.5 Svcutil generates two operations with the same name (Method and MethodAsync)