Совместное использование одного и того же сообщения в контракте для двух действий - PullRequest
0 голосов
/ 29 февраля 2012

Мои сервисы должны анализировать SOAP-запрос для действия ILogging / LogMessage, в котором в качестве корневого элемента внутри тела SOAP есть 'log-entry'. Для этого у меня есть метод LogMessage, который ожидает параметр типа LogMessageRequest.

LogMessageRequest имеет атрибут MessageContract с WrapperName в качестве записи журнала:

[MessageContract(WrapperName = "log-entry")]
public class LogMessageRequest
{
    ...
}

Я также ожидаю еще один SOAP-запрос для действия ILogging / LogException с 'log-entry' в качестве корневого элемента в теле SOAP. Для этого есть метод LogException и параметр типа LogExceptionRequest.

Разница между обоими действиями SOAP заключается в том, что дочерний элемент 'message' внутри 'log-entry' отличается (для LogMessage 'message' является строкой и, за исключением, это сложная сущность).

Вопрос: Поскольку и LogMessageRequest, и LogExceptionRequest имеют одинаковые имена оболочек (log-запись), я получаю исключение, происходящее из LogException, говорящее «log-запись уже экспортирована LogMessage».

Я попытался использовать один и тот же класс запросов для обоих и получить «сообщение» типа объекта. Но это отказывается работать.

Есть указатели? (кстати, нет возможности изменить запрос SOAP).

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Я не верю, что вы можете реализовать это, используя MessageContract / data contract из вашего описания. Возможно, вы сможете сделать это с атрибутами XmlSerializer, но, похоже, вам нужно будет использовать класс Message в контракте операции и посмотреть на сообщение xml, чтобы выяснить, какой это. Можете ли вы опубликовать соответствующие биты определений WSDL / SOAP?

0 голосов
/ 29 февраля 2012

Хотя может быть способ сопоставления различных схем с общим интерфейсом, я предлагаю более разумный подход: создайте адаптер на одном из сервисных интерфейсов, чтобы соответствовать интерфейсу другого.

ЭтоКстати, уродство изолированно, и приложению придется работать только с одним сервисным интерфейсом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...