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

时间:2012-07-18 16:50:14

标签: task-parallel-library visual-studio-2012 svcutil.exe .net-4.5 async-await

我正在使用带有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:不能有两个操作   具有相同名称的同一合同,方法SubmitDataAsync和   MyType类型中的SubmitData违反此规则。您可以更改名称   其中一个操作通过更改方法名称或使用   OperationContractAttribute的名称属性。

我可以通过删除Async附加方法或只使用VS2010中的svcutil来解决这个问题。但我想知道为什么svcutil会生成一个导致运行时异常的接口(这是一个错误吗?),以及是否还有一些额外的东西我应该这样做才能使它工作。

1 个答案:

答案 0 :(得分:21)

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

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