在我的应用程序中,有一个包含EventHadler类型事件的clss,这个类应该在另一个应用程序中远程处理(它必须处理这些事件)。此EventHandler的第一个参数是object o(触发事件的对象)。这个参数在其他应用程序中是否有意义?这些事件会打电话吗?对不起复杂的问题,但我无法清楚地表达我的想法。
答案 0 :(得分:1)
这取决于是否有人使用sender
参数。
如果是,则取决于对象是什么;如果它只对对象所在的app域有意义,那么你需要确保该对象派生自MarshalByRefObject
,以便来自客户端的调用可以远程返回到实例上的实例。服务器
如果按值发送sender
是有意义的,那么你必须确保它是可序列化的。
也就是说,远程事件通常是一个坏主意。更好的解决方案是创建一个具有可在客户端和服务器之间共享的接口的程序集。此接口包含将在客户端上实现的方法(基类为MarshalByRefObject
),并且该实现的实例将传递给服务。然后,该服务将存储此引用,并在您想要引发“事件”时对接口的实现进行调用。
WCF会废除分布式调用上事件的概念,选择使用callback interface的确切模式。