.Net 4.5 Svcutil生成两个具有相同名称的操作(Method and MethodAsync)

vos*_*d01 15 svcutil.exe task-parallel-library async-await .net-4.5 visual-studio-2012

我正在使用svcutil a la消耗预定义的wsdl:

svcutil some_service.wsdl
Run Code Online (Sandbox Code Playgroud)

生成的方法之一具有以下签名:

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

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

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

这会导致运行时异常:

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

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

Jim*_*mmy 21

默认行为似乎已更改.如果您提供/ syncOnly参数,它会为我保留旧的行为.

 /syncOnly                          - Generate only synchronous method
                                  signature. Default: generate synchronous
                                  and task-based asynchronous method
                                  signatures.
Run Code Online (Sandbox Code Playgroud)