Ошибка Wsdl службы WCF: операция ссылается на уже экспортированный элемент сообщения - PullRequest
1 голос
/ 17 марта 2011

У нас есть служба WCF, которая имеет две операции (Операция1 и Операция2) с одним и тем же контрактом на сообщения.Когда вы обращаетесь к Wsdl (Get / Http), мы получаем эту ошибку:


System.InvalidOperationException: было сгенерировано исключение при вызове расширения экспорта WSDL: System.ServiceModel.Description.DataContractSerializerOperationBehavior

contract: Xxxxx ----> System.InvalidOperationException: операция Xxxx.IServiceInterface.Operation1 ссылается на элемент сообщения [http://schemas.somecompany.com/namespace/version/:MessageContract], который уже был экспортирован из операции Xxxx.IServiceInterface.Operation2.

Вы можете изменить имя одной из операций, изменив имя метода или используя свойство Name для OperationContractAttribute.В качестве альтернативы, вы можете более подробно контролировать имя элемента, используя модель программирования MessageContract.


Мне кажется, что повторное использование одного и того же сообщения для различных операций сервиса должно быть возможным.Я понимаю разрешение, которое дается в ошибке, но мы хотим иметь одно и то же сообщение для ряда различных операций.

Мысли?

Подробнее: Мы реализуем событие pub / subмеханизм.Подписчики событий объявляют операцию сервиса с типом события, которое они хотят обработать, и переносят его в общий класс контракта сообщений.Этот общий класс сообщений использует атрибуты кода сообщения для использования XML-имен события-публикатора, который представляет собой единую структуру сообщения.Все подписчики событий зарегистрированы в UDDI, и механизм pub / sub использует эти конечные точки для передачи событий подписчикам.Регистрация сервисных операций в UDDI обнаруживает определенное пространство имен событий для регистрации этих сервисных операций в качестве обработчиков событий (а не операций req / response).

1 Ответ

0 голосов
/ 17 марта 2011

Эта ошибка может возникать, если вы скопировали операцию1, затем изменили имя на операцию2, но не изменили атрибут DataContract, чтобы соответствовать новому имени.

...