Метод службы WCF может быть выполнен в потоке пользовательского интерфейса, как и в случае StandardOleMarshalObject? - PullRequest
0 голосов
/ 28 марта 2012

Я разрабатываю надстройку для коммерческого приложения, чтобы предоставить очень простую информацию о документе, открытом в этом приложении, и так далее.Само приложение не поддерживает надстройки COM или NET, а только надстройку C ++ в DLL.

Я хочу предоставить некоторую информацию клиентам COM, а некоторые - клиентам NET, работающим на той же машине.* Для клиентов COM я разработал в C # реализацию интерфейса COM;затем я создаю объект при запуске хост-приложения и регистрирую объект в таблице запущенных объектов.Вывод этой реализации из StandardOleMarshalObject кажется достаточным для решения проблемы потоков: очевидно, методы моей реализации вызываются только в основном потоке пользовательского интерфейса на границе сообщения, что является требованием.

А для клиентов NET?Мне нужна разная информация, и мне не нужно полагаться на конкретный интерфейс COM для раскрытия этой информации.У меня был соблазн разработать и разместить службу WCF, но мои методы службы вызываются на не-UI therad и происходит сбой приложения хоста.Как мне повторить поведение StandardOleMarshalObject в контексте WCF?Мне нужно реализовать IOperationInvoker?Любое предложение сделать это ?

Спасибо всем и, пожалуйста, извините за мой плохой английский.

1 Ответ

1 голос
/ 28 марта 2012

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

...