我正在使用带有svcutil a la:
的预定义wsdlsvcutil 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会生成一个导致运行时异常的接口(这是一个错误吗?),以及是否还有一些额外的东西我应该这样做才能使它工作。
答案 0 :(得分:21)
默认行为似乎已更改。如果您提供 / syncOnly 参数,它会为我保留旧的行为。
/syncOnly - Generate only synchronous method
signature. Default: generate synchronous
and task-based asynchronous method
signatures.