我正在使用svcutil消耗预定义的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: 在同一契约(contract)中拥有两个具有相同名称的操作(operations),类型MyType中的方法SubmitDataAsync和SubmitData违反了此规则。您可以通过更改方法名称或使用OperationContractAttribute的Name属性之一来更改其中一个操作的名称。
我可以通过删除附加的Async方法或者使用VS2010中的svcutil来解决这个问题, 但我想知道为什么svcutil生成了一个导致运行时异常的接口(这是一个bug吗?),以及是否还需要做其他额外的工作使其正常工作。
/syncOnly
命令行标志,它可以使其不生成基于任务的异步方法。 - vossad01