.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.