• .NET Remoting Basic(1)概览


          .net Remoting是一个.net体系下的分布式架构.  以Advantages of .NET Remoting 为范本来学习下.

    一.定义公用接口和对象

    1.接口

    public interface ICustomerManager
     {
         Customer GetCustomer(int id);
     }

    2.对象

    注意此对象被标记为可序列化

    [Serializable]
     public class Customer 
     {
     
         public String FirstName;
         public String LastName;
         public DateTime DateOfBirth;
     
         public Customer() 
         {
             Console.WriteLine("Customer.constructor: Object created");
         }
     
         public int GetAge() 
         {
             Console.WriteLine("Customer.getAge(): Calculating age of {0}, " +
                 "born on {1}.", 
                 FirstName, 
                 DateOfBirth.ToShortDateString());
     
             TimeSpan tmp = DateTime.Today.Subtract(DateOfBirth);
             return tmp.Days / 365; // rough estimation
         }
     }

    二.注册服务器端服务

    1.定义可跨应用程序域边界的类型

    当跨应用程序域边界使用类型时,类型必须是从 MarshalByRefObject 继承的

    class CustomerManager: MarshalByRefObject, ICustomerManager 
     {
         
         public CustomerManager() 
         {
             Console.WriteLine("CustomerManager.constructor: Object created");
         }
     
         public Customer GetCustomer(int id) 
         {
             Console.WriteLine("CustomerManager.getCustomer): Called");
             Customer tmp = new Customer();
             tmp.FirstName = "John";
             tmp.LastName = "Doe";
             tmp.DateOfBirth = new DateTime(1970,7,4);
             Console.WriteLine("CustomerManager.getCustomer(): Returning " + 
                               "Customer-Object");
             return tmp;
         }
     }


    2.注册服务类型

    class ServerStartup
     {
         static void Main(string[] args)
         {
             Console.WriteLine ("ServerStartup.Main(): Server started");
     
             HttpChannel chnl = new HttpChannel(1234);
             ChannelServices.RegisterChannel(chnl);
             RemotingConfiguration.RegisterWellKnownServiceType(
                     typeof(CustomerManager),
                     "CustomerManager.soap", 
                     WellKnownObjectMode.Singleton);
     
             // the server will keep running until keypress.
             Console.ReadLine();
         }
     }

    3.客户端调用

    static void Main(string[] args)
     {
         HttpChannel channel = new HttpChannel();
         ChannelServices.RegisterChannel(channel);
         
         ICustomerManager mgr = (ICustomerManager) Activator.GetObject(
             typeof(ICustomerManager),
             "http://localhost:1234/CustomerManager.soap");
         Console.WriteLine("Client.Main(): Reference to CustomerManager acquired");
     
         Customer cust = mgr.GetCustomer(4711);
         
         int age = cust.GetAge();
         Console.WriteLine("Client.Main(): Customer {0} {1} is {2} years old.",
             cust.FirstName,
             cust.LastName,
             age);
         
         Console.ReadLine();
     }
  • 相关阅读:
    【JZOJ4807】破解
    输入挂(更新)
    Gorgeous Sequence(线段树)
    线段树套路系列
    hdu 3333 离线线段树 + 思维/树状数组 /在线主席树
    3183 RMQ / 贪心(坑成。。)
    hdu3594 强连通(仙人掌图)
    hdu3639 强连通
    hdu3861 强连通+最小路径覆盖
    图论--最小树形图朱刘算法模板
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1809562.html
Copyright © 2020-2023  润新知