1

现在,我正处于原型设计阶段。所以我才刚刚开始。

情况:服务器 - 将运行测试并将进度发布到客户端,必须是低影响的,没有网络服务器,可能运行 xp Embedded 或 xp home。

客户 - 启动测试并接收进度报告。运行xp pro。

两台机器通过以太网连接。我想使用 .NET 远程处理在两台机器之间进行通信,并且我想使用事件来使用来自服务器的新结果更新客户端,但我已经读到在这些条件下事件是不可靠的。我该怎么做?服务器可以连接到客户端并使用远程处理来发布事件吗?这行得通吗?

4

3 回答 3

3

我曾经部署了一个使用远程处理的系统,服务器启动了一些客户端可以订阅的事件。

为了使它成为可能,您必须将 typeFilterLevel 设置为 full,并且您还必须创建一个在客户端和服务器上已知的“中间”对象,以便能够处理您的事件。

例如:这是服务器端和客户端已知的类。

public abstract class MyDelegateObject : MarshalByRefObject
{
   public void EventHandlerCallback( object sender, EventArgs e )
   {
      EventHandlerCallbackCore(sender, e);
   }

   protected abstract void EventHandlerCallbackCore(object sender, EventArgs e );

   public override object InitializeLifetimeService() { return null; }
}

在客户端,您创建另一个从上述类继承的类,并实现在引发事件时必须执行的实际逻辑。

public class MyConcreteHandler : MyDelegateObject
{
   protected override EventHandlerCallbackCore(object sender, EventArgs e)
   {
       // do some stuff
   }
}

您只需将事件处理程序附加到远程对象的事件,如下所示:

MyConcreteHandler handler = new MyConcreteHandler();
myRemoteObject.MyEventOccured += new EventHandler(handler.EventHandlerCallback);

当然,如果您在 EventHandler 类中更新 Winform 控件,该类也应该实现 ISynchronizeInvoke。

于 2009-01-30T22:01:26.077 回答
3

由于您仍处于原型设计阶段,您可能需要考虑使用 Windows Communication Foundation (WCF) 而不是远程处理。WCF 具有对发布-订阅方案的内置支持,并且已经包含 .NET 远程处理和 Web 服务的所有功能(据我了解)。

于 2009-01-30T22:11:20.567 回答
0

通过服务器连接到客户端,您实际上是在反转模型并使服务器成为客户端,反之亦然。

您最好让客户端启动测试,并轮询服务器以获取状态更新。

您选择的远程处理并不是什么大问题(并且对我提供的意见没有影响),但您可能想要调查它的替代品 (WCF),而不是花时间在“已替代但仍受支持”的技术上。

于 2009-01-30T21:49:15.807 回答