C# 跨不同机器的代表

C# 跨不同机器的代表,c#,events,delegates,C#,Events,Delegates,看起来应该很简单,但我在谷歌上找不到任何东西: 我有一个视频商店服务器,它有多个客户端应用程序,安装在用户的机器上,通过(比方说)web服务进行通信。 当DVD返回时,我希望能够通知一直在等待该DVD的用户 在处理单个应用程序时,使用委托是没有问题的。 我的问题是-这种方法也适用于远程客户端吗?您可以使用双工WCF服务 但如果它真的是一个DVD处理服务,用户不需要立即得到通知,我建议用户的客户端每隔10分钟轮询一次服务器。它的实现要简单得多。您可以为此使用双工WCF服务 但如果它真的是一个DVD

看起来应该很简单,但我在谷歌上找不到任何东西:
我有一个视频商店服务器,它有多个客户端应用程序,安装在用户的机器上,通过(比方说)web服务进行通信。
当DVD返回时,我希望能够通知一直在等待该DVD的用户

在处理单个应用程序时,使用委托是没有问题的。

我的问题是-这种方法也适用于远程客户端吗?

您可以使用双工WCF服务


但如果它真的是一个DVD处理服务,用户不需要立即得到通知,我建议用户的客户端每隔10分钟轮询一次服务器。它的实现要简单得多。

您可以为此使用双工WCF服务


但如果它真的是一个DVD处理服务,用户不需要立即得到通知,我建议用户的客户端每隔10分钟轮询一次服务器。它的实现要简单得多。

是的-您可以使用.NET远程处理。有关简单示例,请参阅本文:


是-您可以使用.NET远程处理。有关简单示例,请参阅本文:


如果您想要一个客户端应用程序,它将提供一个人们可以连接到的委托,那么可以。您可以使用.net远程处理来实现这一点

我用了这个例子:

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

基本上,该类将如下所示:

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方法,而不是像您通常那样连接。然后,当事件触发时,它将最终调用被重写的方法并执行它们的代码


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

如果您希望有一个客户端应用程序,它将提供一个人们可以连接到的委托,那么是的。您可以使用.net远程处理来实现这一点

我用了这个例子:

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

基本上,该类将如下所示:

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方法,而不是像您通常那样连接。然后,当事件触发时,它将最终调用被重写的方法并执行它们的代码


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

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


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

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


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

“在谷歌上找不到任何东西”我不是说信息不存在。我的意思是说我找不到任何信息(可能是因为我不知道合适的术语)“在谷歌上找不到任何信息”我不是说这些信息不存在。我的意思是说我找不到任何(可能是因为我不知道正确的术语)你的意思是类似于这个:这个:?从纸面上看,实施起来似乎没有什么痛苦。为什么你说你更喜欢投票?投票更简单:-),但如果你觉得它足够轻松,那就去吧。你的意思类似于:还有这个:?从纸面上看,实施起来似乎没有什么痛苦。为什么你说你更喜欢投票?投票更简单:-)但如果你觉得它足够轻松,那就去吧。UGH,远程处理。首先,据我记忆所及,WCF应该取代远程处理的功能。其次,更重要的是,我参与了一个使用远程处理的项目。我再也不会犯那种错误了。在我看来,只有悲伤。我很感兴趣-您对使用远程处理有过积极的体验吗?我已经成功地使用了它,但从.NET1.1开始就不再需要它了。WCF可能旨在取代远程处理,但远程处理尚未被弃用,因此它仍然是一种可能的解决方案。UGH,远程处理。首先,据我记忆所及,WCF应该取代远程处理的功能。其次,更重要的是,我参与了一个使用远程处理的项目。我再也不会犯那种错误了。在我看来,只有悲伤。我很感兴趣-你有过积极的经历吗