c#远程事件

我正在尝试使用c#进行服务器客户端应用程序以了解有关远程程序的更多信息。

结构很简单。

我有一个服务器,当调用函数updateInventory并且每个客户端向事件注册一个函数(使用委托)时触发事件。

因此,当任何客户端更新库存时(通过调用updateInventory函数),所有客户端都会通过事件的方式向其发出警告。

现在的问题是它根本不起作用,当客户端调用updateInventory函数时,服务器中的那个不会被激发。

该计划有以下4个组成部分:

inventoryChangedArgs

哪个是Serializable,并作为事件触发的函数的参数。 我将其编译为.dll并通过“添加引用…”在服务器和客户端上使用:

using System; [Serializable] public class InventoryChangeArgs:EventArgs { private string pno; public string Pno { get { return pno; } set { pno = value; } } private int change; public int Change { get { return change; } set { change = value; } } public InventoryChangeArgs(string pno, int change) { Console.WriteLine("InventoryChangeArgs constructed"); this.pno = pno; this.change = change; } } 

InventoryManager

其中声明了委托,事件和状态何时触发事件。 客户端具有相同的类,唯一的区别是UpdateInventory内容,它是null …其他一切都是相同的。

 public class InventoryManager:MarshalByRefObject { public delegate string InventoryChangeHandler(object sender, InventoryChangeArgs info); public event InventoryChangeHandler Changed; public void UpdateInventory(string pno, int change) { Console.WriteLine("UpdateInveroty has been invoced"); if (change == 0) Console.WriteLine("No changed event"); else if (Changed != null) { Changed(this, new InventoryChangeArgs(pno, change)); Console.WriteLine("Changed event"); } } } 

客户端上的事件function向Wan事件添加事件并设置远程配置:

 class Client { static void Warn(object sender,InventoryChangeArgs args) { Console.WriteLine("It was changed by: {0] the {1}",args.Change,args.Pno); } static void Main(string[] args) { RemotingConfiguration.Configure("Client.exe.config",false); InventoryManager inv=new InventoryManager(); inv.Changed+=new InventoryManager.InventoryChangeHandler(Warn); Console.WriteLine("Client started"); inv.UpdateInventory("102", 2); Console.ReadLine(); } } 

远程配置文件这是客户端的远程配置文件,服务器几乎相同,但以下行除外:

 ...     ...  

                 

如果有人能给我一些帮助,我将不胜感激。 提前致谢