我需要对WCF服务的功能进行一些实时报告。该服务是在Windows应用程序中自托管的,我的要求是当客户端调用某些方法时向主机应用程序报告“实时”。
我最初对任务的想法是在服务代码中发布“NotifyNow”事件,并在我的调用应用程序中订阅该事件,但这似乎是不可能的。在我的服务代码(实现,而不是接口(interface))中,我尝试添加以下内容
public delegate void MessageEventHandler(string message);
public event MessageEventHandler outputMessage;
void SendMessage(string message)
{
if (null != outputMessage)
{
outputMessage(message);
}
}
并在需要通知主机应用程序某些操作时调用SendMessage方法。 (这是基于我记得在winforms应用程序中进行的这种形式间通信的结果,我的内存可能让我失望了……)
但是,当我尝试在主机中连接事件处理程序时,我似乎无法弄清楚如何附加到事件上……我的托管代码简而言之
service = new ServiceHost(typeof(MyService));
service.outputMessage += new MyService.MessageEventHandler(frm2_outputMessage);
// the above line does not work!
service.Open();
(包装在try/catch中)。
有人可以帮助我,要么告诉我如何使这种方法起作用,要么为我提供更好的方法。
TIA
最佳答案
服务变量是ServiceHost的实例,而不是您的服务实现。尝试类似的东西:
MyService myService = new MyService();
myService.outputMessage += new MyService.MessageEventHandler(frm2_outputMessage);
host = new ServiceHost(myService);