时间:2011-07-21 11:49:53

标签: c# events delegates

它似乎应该很容易,但我在谷歌上找不到任何东西:
我有一个视频商店服务器,它有多个客户端应用程序,安装在用户的机器上,通过(比如说)Web服务进行通信。 当DVD返回时,我希望能够通知已经等待该DVD的用户。

在处理单个应用程序时,使用代理就没问题了 我的问题是 - 这种方法也适用于远程客户端吗?

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

答案 2 :(得分:0)

如果您想拥有一个客户端应用程序,该应用程序将提供人们可以连接的代理,那么是。你可以使用.net远程处理。

我使用了这个例子:http://www.codeproject.com/KB/dotnet/DotNetRemotingEventsExpl.aspx

基本上,您要做的是公开发布已知对象的远程服务器。事件的技巧是服务器必须知道客户端连接事件处理程序的类型。所以你在这种情况下所做的就是你还提供一个抽象类作为事件接收器。

基本上这个类看起来像这样:

public abstract class MyEventSinkClass : MarshalByRefObject
{
   public abstract void MyAbstractEventHandler(string arg1, string arg2);

   public void MyEventHandler(string arg1, string arg2)
   {
       MyAbstractEventHandler(arg1,arg2);
   }
}

然后在客户端,他们将创建一个类,并从MyEventSinkClass继承。他们将自己的逻辑用于处理MyAbstractEventHandler的覆盖中的事件。当他们连接他们正在使用远程处理的实例时,而不是像通常那样连线,他们需要连接到继承MyEventSinkClass的类的实例到MyEventHandler方法。然后当事件触发时,它最终会调用overriden方法并执行它们的代码。

您可以在我给出的链接中找到有关如何设置远程服务器和客户端的详细信息,这并不困难。

答案 3 :(得分:0)

如果您不想发明轮子,请使用消息队列工具。 然后,当DVD返回时,您在某个队列上发布消息。用户正在注册他们感兴趣的DVD的队列。

然后通信是持久的和异步的。用户即使离线也会收到通知(一旦他们连接并轮询队列,他们就会收到通知)