15

我正在使用 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 会生成一个导致运行时异常的接口(这是一个错误吗?),以及我是否应该做一些额外的事情来使它工作。

4

1 回答 1

21

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

 /syncOnly                          - Generate only synchronous method
                                  signature. Default: generate synchronous
                                  and task-based asynchronous method
                                  signatures.
于 2012-11-26T09:03:17.890 回答