.Net 4.5 Svcutil генерирует две операции с тем же именем (метод и методAsync)

Я использую предопределенный wsdl с svcutil a la:

svcutil some_service.wsdl

один из генерируемых методов имеет следующую подпись:

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

В то время как scvutil из VS2010/.net35 генерирует только вышеописанное, и VS не имеет проблем с lanuching службой, программа svcutil, которая является частью VS2012/.net45, также генерирует метод с сигнатурой

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

Это приводит к исключению во время выполнения:

System.InvalidOperationException: не может иметь две операции в один и тот же контракт с тем же именем, методы SubmitDataAsync и SubmitData в типе MyType нарушает это правило. Вы можете изменить название одной из операций, изменив имя метода или используя Имя свойства OperationContractAttribute.

Я могу обойти это, удалив приложенные методы Async или просто используя svcutil из VS2010. Но мне интересно, почему svcutil создает интерфейс, который вызывает исключение во время выполнения (это ошибка?), И есть ли что-то дополнительное, что я должен сделать, чтобы заставить его работать.

Ответы

Ответ 1

Поведение по умолчанию, похоже, было изменено. Если вы предоставили параметр /syncOnly, он сохранил для меня прежнее поведение.

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