WCF: доступ к форме окна изнутри службы

2

Как я могу достичь этого сценария?

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

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

Я не могу этого сделать, конечно, поскольку я не могу передать форму в службу WCF.

Любые идеи или примеры кода?

  • 0
    То есть ваш сервис работает только в том случае, если кто-то запускает ваше приложение WinForms?
Теги:
wcf

2 ответа

2

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

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

См. эта статья CodeProject - в середине автор говорит о "проблемах с потоками UI". Это в основном то, что вам нужно сделать:

SendOrPostCallback callback = 
    delegate (object state)
    {   
        yourListBox.Add(state.ToString());
    };

_uiSyncContext.Post(callback, guestName);

См. статью Juval Lowy MSDN " Контексты синхронизации WCF" для всестороннего введения в тему.

Хостинг службы WCF внутри приложения Winforms кажется мне довольно плохой идеей - прежде всего из-за всех этих проблем с потоками, а во-вторых, он будет работать только в том случае, если приложение winforms работает. Не могли бы вы поместить свою службу WCF в консольное приложение или службу Windows NT, а затем просто создать приложение мониторинга на основе Winforms, которое может проверять, например. таблицу базы данных для входящих сообщений или что-то еще?

Марк

  • 1
    Размещение службы WCF в расширенном клиенте - вполне допустимый сценарий. Например, вы можете использовать его для реализации каналов обратного вызова, настройки одноранговых сетей и т. Д. WCF - это гораздо больше, чем просто технология на основе сервера.
1

Посмотрите этот SO ответ - насколько я понимаю, это в основном тот же вопрос.

Вы можете встраивать зависимости в службы WCF: вам просто нужно реализовать пользовательскую службу ServiceHostFactory, которая прокладывает все для вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню