Событие WCF-Service - PullRequest
       1

Событие WCF-Service

0 голосов
/ 01 апреля 2011

У меня проблема в том, что я не знаю, как перенаправить объект (полученный через WCF) в другой поток (например, WinForm).

Я создаю сервис в классе ComManager.cs :

        var wcfServer = new ServiceHost(typeof(ClientListenerService));
        wcfServer.Open();

У меня есть реализация интерфейса службы, подобная этой, в ClientListenerService.cs :

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single ..... )]
public class ClientListenerService : IClient
{
    // This is a theoretical approach, as there is no way to forward an event handler to the service here
    public event xyz;

    public void AlarmTriggered(AlarmTriggeredDto dto)
    {
        // How do i get the object to some kind of event handler outside of this service here???
        // I need sth. like: 
        xyz.Invoke(dto);
    }
}

Когда вызывается метод AlarmTriggered (dto) , мне нужно перенаправить объект в другой поток. Я понятия не имею, как этого добиться, так как я не могу найти способ передать какие-либо параметры в сервисный узел (например, обработчик событий или что-то в этом роде), который мой ClientListenerService может использовать впоследствии. Все обходные пути со статическими объектами / очередями не соответствуют моим требованиям.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Чтобы дополнительно объяснить, что говорит Джон, когда ваша служба WCF настроена на использование Singleton ([ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]), вы можете заранее создать и настроить экземпляр, который будет использоваться в качестве одиночного, и передать его в конструктор ServiceHost.

ClientListenerService svc = new ClientListenerService();
svc.xyz += myListener.xyzHandler;
var wcfServer = new ServiceHost(svc, baseAddresses);
wcfServer.Open();

Я бы также порекомендовал загрузить библиотеку ServiceModelEx из iDesign , которая предоставляет ServiceHost<T> (написано Ювалом Лоуи, автором Программирование служб WCF ). Мне это очень понравилось. с ним легче работать.

0 голосов
/ 01 апреля 2011

Ваш ClientListenerService - это класс, как и любой другой. Это может быть публичное мероприятие, как и любое другое. Другой код вашего хоста может подписаться на это событие, как обычно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...