У меня есть класс, который вызывает некоторые события и выполняет операции. Например
class MyService
{
EventHandler MessageSent;
EventHandler StatusReceived;
public void StartService(Serviceconfig configObject)
{
//Intialize serial port with OnSerialPortReceived event handler.
}
public void GetStatusForMessage(string messageID)
{
}
public void OnSerialPortReceived(string data)
{
if(data=="123")
MessageSent(this,null);
if(data=="456")
StatusSent(this,null);
}
}
Это консольное приложение, оно будет запускаться при старте системы. Теперь нам нужно приложение для мониторинга (в основном клиент с обратным вызовом), когда какое-то событие срабатывает в службе событий, для этого мы должны использовать WCF. а также приложение монитора вызывает класс обслуживания. Например, в приведенном выше примере метод GetStatusForMessage будет вызываться приложением монитора. Итак, как мы можем реализовать с помощью WCF. Если сделать вышеуказанный класс сервисом с сервисным контрактом, он не будет инициализирован и запущен до тех пор, пока клиент не инициирует вызов. Этот объект класса будет инициализирован и начнет свою работу при каждом перезапуске системы.
Я нашел эту статью http://msdn.microsoft.com/en-us/magazine/cc163537.aspx. При таком подходе мой сервис станет клиентом-издателем, а приложение-монитор станет клиентским приложением-подписчиком. Но клиент должен совершать вызовы класса обслуживания. Поэтому мое клиентское приложение должно поддерживать оба обратных вызова, а также иметь возможность вызывать методы службы. Как я могу добиться этого с помощью WCF? Обратите внимание, что класс службы, который отслеживает события, является единственным экземпляром и инициализируется при запуске приложения.
Надеюсь, я получу решения для этого. Пожалуйста, дайте мне знать для получения дополнительных разъяснений.