Служба WCF - отправка объекта обратно в вызывающее приложение - PullRequest
0 голосов
/ 02 марта 2011

Моя служба WCF (размещенная как служба Windows) имеет несколько методов «SendEmail», которые отправляют электронные письма после некоторой обработки.

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

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

Может кто-нибудь подсказать, какие изменения мне нужно внести в мою службу WCF (которая в настоящее время имеет одностороннюю операцию)?

Также,пожалуйста, сообщите мне, нужно ли мне переходить на асинхронную работу или в очередь сообщений или это может быть дуплексный контракт?

Спасибо!

Ответы [ 2 ]

1 голос
/ 02 марта 2011

У вас есть несколько вариантов:

  • Используйте подход Ладислава. Только чтобы добавить, что служба возвращает токен, а затем клиент использует токен для опроса до истечения времени ожидания или успешного ответа. Кроме того, сервер хранит эти временные электронные письма некоторое время, а после истечения времени ожидания их удаляет.
  • Использовать дуплексную связь, чтобы сервер также получал способ обратного вызова клиента и делал это после завершения обработки. Но не делайте этого - а вот мой взгляд почему бы и нет.
  • Используйте асинхронный подход. Вы можете найти хорошую информацию здесь .
1 голос
/ 02 марта 2011

Исходя из вашего описания, я думаю, вам придется:

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

Процесс будетбыть:

  1. Пользователь вызовет некоторый http-запрос, который приведет к вызову вашей службы WCF для обработки (первая операция)
  2. Служба WCF инициирует некоторую обработку (асинхронная или первая операция будетв одну сторону, чтобы клиенту не приходилось ждать).
  3. Обработка каким-то образом сохранит электронную почту
  4. В зависимости от продолжительности обработки вы можете использовать AJAX для опроса WebApp, который, в свою очередь, опрашивает WCFСлужба для подготовленных писем или вы создадите отдельную страницу, к которой у пользователя будет доступ, чтобы увидеть подготовленные письма.Оба метода используют вторую операцию.
  5. Пользователь проверит подготовленные электронные письма и вызовет запрос http, что приведет к вызову третьей операции для отправки этих электронных писем.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...