2012-01-26 49 views
0

我有一个Web服务实例化对象,订阅该对象上的事件,然后调用该对象上的一个函数,这将导致事件被触发。有没有办法等待事件触发,以便我可以从EventArgs中获取结果,以便将这些结果作为Web服务的结果传递给它?如何从WCF Web服务中监听对象上的事件?

+1

是方法的调用和事件的触发同步还是异步? –

+0

它们是异步的 – adam0101

+0

也就是说,在对象上调用方法会启动一个异步进程,最终完成并触发事件。这是你的意思吗? – adam0101

回答

1

您将需要某种与事件处理程序中获取信号的事件(例如ManualResetEventSlim)关联的同步原语。然后您的请求线程可以等待事件并在事件发生后收集结果并生成响应

但是,更自然的模型可能是将服务创建为异步服务,并且只能在异步服务时完成处理操作完成 - 我创建了a sample of this一会儿回

+0

这听起来类似于我在这里找到的:http://stackoverflow.com/questions/475617/wrapping-an-asynchronous-method-synchronously-in-c-sharp但使用AutoResetEvent。 AutoResetEvent,ManualResetEvent和ManualResetEventSlim有什么区别? – adam0101

+0

AutoResetEvent和ManualResetEvent是底层内核对象的包装,而ManualResetEventSlim是一个完全托管的事件(所以更轻量化)。但ManualResetEventSlim仅在.NET 4.0中可用。服务员唤醒后,AutoResetEvents会将自己重置为无信号。手动事件必须手动重置 –