Я бы предпочел иметь асинхронный сервис, который мог бы получать и отправлять данные одновременно, это также повышает надежность сервиса.Такой подход позволяет избежать проблемы Slow Consumer, которая часто возникает в случае проблем на стороне клиента, поэтому служба будет защищена от таких медленных / проблемных клиентов.
Что касается потока пользовательского интерфейса, то это ответственностьклиент.В основном клиент отвечает за отправку действий в потоке пользовательского интерфейса.
РЕДАКТИРОВАТЬ: ответ Скомски напомнил мне подход, который мы использовали недавно
В основном сервис предоставляет методы, подобные следующим:1009 * Таким образом, у клиента есть возможность передать собственный контекст синхронизации, чтобы служба использовала его при отправке сообщений
synchronizationCOntext.Post(clientCallback, ...);
или использовала его более простым способом.