.net Remoting 示例代码

最近一个项目用到这个东西,就整理了下写了示例,仅供新手参考,如有不当之处请大侠指点一二;

首先要说明Remoting是个什么东西了,它是microsoft结合.net的基础上延伸出来的采用分布式编程的一种技术,Remoting主要用于管理跨应用程序域的同步和异步RPC 会话。在默认情况下,Remoting使用 HTTP 或 TCP 协议,并使用 XML 编码的 SOAP 或本机二进制消息格式进行通信。.NET Remoting 提供了非常灵活和可扩展的编程框架,并且他可以管理对象的状态。 Remoting还支持IPC信道,IPCChannel是.NET Framework 2.0 里面新增的,它使用 Windows 进程间通信 (IPC) 系统在同一计算机上的应用程序域之间传输消息。在同一计算机上的应用程序域之间进行通信时,IPC 信道比 TCP 或 HTTP 信道要快得多。但是IPC只在本机应用之间通信。所以,在客户端和服务端在同一台机器时,我们可以通过注册IPCChannel来提高Remoting的性能,否则只能是tcp信道或http信道;

下面请看示例:

一、创建远程对象

public interface IPowerService 
    {
        string WriteLog();
    }
 public class UserService : MarshalByRefObject,IPowerService
    {
        public DataTable GetUserList()
        {
            string sql = "select * from BAS_USER ";
            return new UserData().GetUserList(sql);
        }


        public string WriteLog()
        {
            return "系统日志记录时间是:" + DateTime.Now.ToLocalTime() ;
        }
    }

二、创建一个宿主程序,这个程序可以是控制台应用程序,也可以是winforms程序,还可以是web应用程序让IIS承载;创建宿主程序的步骤 1定义并注册通道 2注册服务器激活的远程对象

 try
            {
                HttpServerChannel server = new HttpServerChannel(9000);
                //TcpServerChannel server = new TcpServerChannel(9001);
                ChannelServices.RegisterChannel(server, false);
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(UserService), "UserService.rem", WellKnownObjectMode.Singleton);
                Console.WriteLine("服务启动成功!");
                Console.WriteLine("----------------------------------------------------------------");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine("服务启动失败:" + ex.Message);
                Console.WriteLine("----------------------------------------------------------------");
                Console.ReadLine();
            }

三、客户端调用程序

IPowerService obj = null;
                try
                {
                    //ChannelServices.RegisterChannel(new System.Runtime.Remoting.Channels.Http.HttpClientChannel(), false);
                    ChannelServices.RegisterChannel(new System.Runtime.Remoting.Channels.Http.HttpClientChannel(), false);
                }
                catch (Exception ex)
                {
                    Response.Write(ex.Message.ToString());

                }

                //obj = (IPowerService)Activator.GetObject(typeof(IPowerService), "tcp://192.168.2.102:9001/UserService.rem");
                obj = (IPowerService)Activator.GetObject(typeof(IPowerService), "http://192.168.2.102:9000/UserService.rem");
                if (obj != null) {
                    var us = (obj as UserService);
                    var dt = us.GetUserList();
                    StringBuilder sb = new StringBuilder();
                    if (dt != null)
                    {                        
                        foreach (DataRow item in dt.Rows)
                        {
                            sb.Append(item["Login_Name"] + "<br />");
                        }
                        
                    }

                    sb.Append("-------------------tcp or http demo-----------------" + us.WriteLog());
                    Literal1.Text = sb.ToString();
                }
                else
                {
                    Literal1.Text = "与服务器连接失败!";
                }

注意:当服务器端定义的是如http信道,那么客户端调用的必须也是http信道;




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值