为WCF具体类实例添加事件处理程序

时间:2009-11-12 19:45:23

标签: .net wcf events

是否可以从ServiceHost中检索具体的类实例,以便我可以为该类的事件添加事件处理程序?

Public Class Widget
      Public Event MessageCalled(sender as object, e as EventArgs)
      Public Sub DoSomething()
         '-- do a whole lot of stuff --'
         RaiseEvent MessageCalled(Me, new EventArgs())
      End Sub
End Class


Private _host As New ServiceHost(GetType(Widget), New Uri() {New Uri("http://localhost:50000")})

因此,当客户端调用DoSomething()方法时,我可以在主机上处理MessageCalled()事件。

我发现的大部分内容都是关于在客户端处理事件的,但我对此并不感兴趣。

2 个答案:

答案 0 :(得分:1)

我不完全明白你要做的是什么,但我想你想从你的服务主机那里得到服务类实例?

好吧,想一想:如果您在繁忙的系统上有服务主机,那么很有可能您可以同时提供多个并发客户端请求。默认情况下,在WCF中,每个客户端请求都有自己的服务类实例,这也意味着,WCF运行时可能会从服务主机中激活多个“Widget”实例 - 这n个实例中的哪一个就是你想?

ServiceHost与其托管服务类之间通常没有1:1的关系....或者至少你不能依赖于1:1的关系。我不知道在给定ServiceHost实例的情况下获取单个(或所有多个)服务类实例的方法,抱歉。

我想你需要重新思考一下你的设计,并找到一种方法以不同的方式解决这个问题。我现在不认为在WCF你可以做你想做的事。

答案 1 :(得分:1)

我认为您最好使用WCF运行时提供的扩展点,而不是尝试使用这样的事件。要开始使用,请查看名为Extending WCF的SDK部分。

如果你提供了一些关于你想要实现的目标的更多细节,我们可以提供一些更具体的建议来做什么,但是根据你的示例代码看来,你似乎只想参与每一条消息。与您的服务交换,以便您可以记录一些信息?如果是这种情况,那么您可能希望实现IDispatchMessageInspector

相关问题