我需要对 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);
关于wcf - 订阅 WCF 服务中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1537302/