• 关于.Net Remoting 的一个简单示例


    我对.Net Remoting 是从2002年就已经知道这个说法了。但是一直很害怕这个怪物。因为每次想试图去搞清楚它的时候,
    一看他的那么多页的文档,我是看不下去了.因为他总是先告诉你很多恐怖的概念,中间夹杂一些"断章取义"的代码,从来就
    没有一个完整的代码. 所以总是这样虎头蛇尾的.估计大家也有很多人是这样子的. 今天我不跟大家说概念了.  .Net Remoting 整个框架分成三部分:
    1. 服务器端
      需要引用2
      代码如下:  
     

    using System;
    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    using System.Runtime.Remoting.Channels.Http;

    namespace HelloServer
    {
        
    /// <summary>
        
    /// Summary description for Class1.
        
    /// </summary>

        class Server
        
    {
            
    /// <summary>
            
    /// The main entry point for the application.
            
    /// </summary>

            [STAThread]
            
    static void Main(string[] args)
            
    {
                HttpServerChannel tcpChannel 
    = new HttpServerChannel(5256);
                ChannelServices.RegisterChannel(tcpChannel);
                
    //if you set WellKnownObjectMode.SingleCall,when client call, server side will create a new object even if there is a old object.
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(Hello.Hello),"Shark",WellKnownObjectMode.SingleCall);
                System.Console.WriteLine(
    "Hit to exit");
                System.Console.ReadLine();
            }

        }

        
    }

     
    2. 具体实现服务的类库
      代码如下:
     

    using System;
    using System.Data;
    namespace Hello
    {
        
        
    public class Hello:System.MarshalByRefObject
        
    {
            
    public Hello()
            
    {
                Console.WriteLine(
    "Constructor");
            }

            
    ~Hello()
            
    {
                Console.WriteLine(
    "Destructor");
            }

            
    public string Greeting(string name)
            
    {
                Console.WriteLine(
    "Greeting");
                
    return "Hello," + name;
            }


            
    public DataTable GetData()
            
    {
                DataTable dt 
    = new DataTable();
                dt.Columns.Add(
    new DataColumn("ID",typeof(String)));
                DataRow rs 
    = dt.NewRow();
                rs[
    "ID"= "1";
                dt.Rows.Add(rs);
                rs 
    = dt.NewRow();
                rs[
    "ID"= "2";
                dt.Rows.Add(rs);
                rs 
    = dt.NewRow();
                rs[
    "ID"= "3";
                dt.Rows.Add(rs);
                
    return dt;
            }

            
        }

    }


    2. 客户端
      需要引用2
      代码如下:
      

    private void button1_Click(object sender, System.EventArgs e)
            
    {
                
    //You can use the following method to create remoting object
                
    //Method 1:Hello.Hello obj = (Hello.Hello)Activator.GetObject(typeof(Hello.Hello),"http://127.0.0.1:5256/Shark");
                
    //Method 2:Hello.Hello obj = (Hello.Hello)RemotingServices.Connect(typeof(Hello.Hello),"http://127.0.0.1:5256/Shark");
                Method 3: 
                
                
    Method 4: 
                
    if(obj != null)
                
    {
                    
    this.dataGrid1.DataSource = obj.GetData();
                    
    this.Text = obj.Greeting(System.DateTime.Now.ToString());
                    ILease lease 
    = (ILease)obj.GetLifetimeService();

                }

            }


            
    private void Form1_Load(object sender, System.EventArgs e)
            
    {
                ChannelServices.RegisterChannel(
    new HttpClientChannel());
            }


    整个例子的完整代码,请下载https://files.cnblogs.com/SharkXu/DotNetRemoting.zip.

  • 相关阅读:
    sublime text3 常用插件安装
    eclipse 快捷键
    数组去重及数组的prototype原型
    如何用angularjs给从后台传来数据添加链接
    【转载】Java Web的web.xml文件作用及基本配置
    【转】数据库几种范式
    Socket编程
    进程间的五种通信方式介绍
    进程与线程的区别
    【转载】程序员必知之浮点数运算原理详解
  • 原文地址:https://www.cnblogs.com/SharkXu/p/NetRemoting.html
Copyright © 2020-2023  润新知