• λ我爱Aspx >> Asp.Net >> Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇
  • Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇

  • :aspxer  Դ:internet  :2007-5-15 20:46:10  ؼ:.net
  • typeof(ServerRemoteObject.ServerObject),objs,attrs);

    可以看到,objs[]数组传递的就是构造函数的参数。

    b、public static ObjectHandle CreateInstance(string assemblyName, string typeName, object[] activationAttribute);

    参数说明:

    assemblyName :将在其中查找名为 typeName 的类型的程序集的名称。如果 assemblyName 为空引用(Visual Basic 中为 Nothing),则搜索正在执行的程序集。

    typeName:首选类型的名称。

    activationAttributes :包含一个或多个可以参与激活的属性的数组。

    参数说明一目了然。注意这个方法返回值为ObjectHandle类型,因此代码与前不同:

    object[] attrs = {new UrlAttribute("tcp://localhost:8080/EchoMessage")};

    ObjectHandle handle = Activator.CreateInstance("ServerRemoteObject",

    "ServerRemoteObject.ServerObject",attrs);

    ServerRemoteObject.ServerObject obj = (ServerRemoteObject.ServerObject)handle.Unwrap();

    这个方法实际上是调用的默认构造函数。ObjectHandle.Unwrap()方法是返回被包装的对象。

    说明:要使用UrlAttribute,还需要在命名空间中添加:using System.Runtime.Remoting.Activation;

    五、Remoting基础的补充

    通过上面的描述,基本上已经完成了一个最简单的Remoting程序。这是一个标准的创建Remoting程序的方法,但在实际开发过程中,我们遇到的情况也许千奇百怪,如果只掌握一种所谓的“标准”,就妄想可以“一招鲜、吃遍天”,是不可能的。

    1、注册多个通道

    在Remoting中,允许同时创建多个通道,即根据不同的端口创建不同的通道。但是,Remoting要求通道的名字必须不同,因为它要用来作为通道的唯一标识符。虽然IChannel有ChannelName属性,但这个属性是只读的。因此前面所述的创建通道的方法无法实现同时注册多个通道的要求。

    这个时候,我们必须用到System.Collection中的IDictionary接口:

    注册Tcp通道:

    IDictionary tcpProp = new Hashtable();

    tcpProp["name"] = "tcp9090";

    tcpProp["port"] = 9090;

    Ҷƪл˵?
  • һƪMicrosoft .Net Remoting系列专题之三:Remoting事件处理全接触
    һƪ一步一步学Remoting之四:承载方式