Информационные сообщения, возвращенные с участием WCF - PullRequest
1 голос
/ 09 апреля 2010

Этот вопрос касается «информационных сообщений» и того, чтобы они последовательно передавались из «бэкенда» в «фронтэнд». Быстрый вопрос: «Как ты это делаешь?»

Справочная информация:

Веб-приложение, использующее WCF для вызова сервисов.

В серверной службе может появиться «сообщение». Теперь причиной этого «сообщения» может быть ряд причин, но для этого обсуждения давайте предположим, что часть данных была просмотрена, и было определено, что вызывающей стороне должна быть возвращена некоторая информация о ней.

Это «информационное» сообщение может появляться во время сохранения, а также может появляться во время поиска информации. Опять же, это не то, что здесь важно, а тот факт, что есть некоторые информационные сообщения, которые нужно передать по ряду различных сценариев.

С точки зрения команды, мы все хотим постоянно возвращать эти «сообщения» стандартным способом. Теперь, в прошлом этот «стандартный путь» был сделан разными людьми разными способами.

Вот некоторые возможности:

1) Каждая операция имеет в конце параметр «ref», содержащий эти сообщения

2) Каждый метод возвращает эти сообщения ... однако этот метод работает только для методов «Сохранить», поскольку можно подумать, что методы «Извлечение» должны возвращать реальные данные, а не сообщения

3) Некоторые используют подход контекста вызова, чтобы не «загрязнять» все сигнатуры сообщений чем-либо; однако, с WCF на картине это усложняет вещи. То есть возвращаясь к сообщениям, идите по заголовку?

Вопрос: Тогда вернемся к моему вопросу ... как другие возвращают «сообщения», такие как то, что было описано выше, через уровни приложения, через WCF и обратно вызывающей стороне?

1 Ответ

0 голосов
/ 09 апреля 2010

Я думаю, у вас есть два правильных способа сделать это:

  1. добавить поле InfoMessage : string ко всем вашим DataContracts, которое может содержать информационное сообщение (или нет) обратно с сервера

  2. Если вы не хотите помещать это в DataContracts, то создайте заголовок, который вы заполняете на сервере, прежде чем сообщение возвращается клиенту, а на клиенте вы можете проверить этот заголовок и получить это если присутствует

Чтобы автоматически добавлять заголовки к сообщениям WCF, обычно используется механизм MessageInspectors - маленькие кусочки кода, которые можно настроить или добавить с помощью атрибута в контракте на операцию, который добавит заголовок на одном конце и проверьте входящее сообщение для этого заголовка (и извлеките его, если имеется) на другом конце.

Есть несколько довольно хороших постов в блоге, показывающих, как создать инспектор сообщений:

В основном они переходят с клиента на сервер, например клиент отправляет вместе с заголовком некоторую «метаинформацию» для службы, но она работает отлично и в обратном направлении.

Проверьте два соответствующих интерфейса для реализации:

  • IClientMessageInspector на стороне клиента, который имеет сообщения BeforeSendRequest и AfterReceiveReply для реализации
  • IDispatchMessageInspector на стороне сервера, который имеет метод AfterReceiveRequest и BeforeSendReply для реализации
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...