C#实现.Net Remoting服务端与客户端通信
C#实现.Net Remoting服务端与客户端通信
使用.Net Remoting技术实现服务端与客户端通信。 本文介绍: 1. 定义远程对象。继承 System.MarshalByRefObject. 2. 注册服务器端监听通道。使用TcpServerChannel,ChannelServices,RemotingConfiguration类. 3. 注册客户端通信通道。使用ChannelServices,Activator类。 Activator.GetObject()方法是为指定类型、URL 和通道数据所指示的已知对象创建一个代理, 参数type:希望连接到的已知对象的类型。 我们通过Activator.GetObject()方法创建远程对象进行通信。 服务器主界面, 注册两个远程对象,分别是HelloURI和CommonServiceURI 启动服务器代码: private void btnStartServer_Click(object sender, EventArgs e) { //创建通信侦听通道对象 TcpServerChannel channel = new TcpServerChannel(8086); //注册通信侦听通道 ChannelServices.RegisterChannel(channel, true); //注册对象URI, 注册两个远程对象 RemotingConfiguration.RegisterWellKnownServiceType(typeof(HelloData), HelloData.ObjectURI, WellKnownObjectMode.SingleCall); //注册对象URI, 注册两个远程对象 RemotingConfiguration.RegisterWellKnownServiceType(typeof(CommonService), CommonService.ObjectURI, WellKnownObjectMode.SingleCall); lblServer.Text = "服务器已启动!"; label1.Text = "已启动URI:\r\n" + HelloData.ObjectURI + "\r\n" + CommonService.ObjectURI; } 客户端,点[Call Remote Server (Hello)]按钮调用远程对象HelloData.Greeting方法。 源代码: private void btnServer_Click(object sender, EventArgs e) { try { HelloData obj = (HelloData)Activator.GetObject(typeof(HelloData), txtUrl.Text + "/" + HelloData.ObjectURI); if (obj == null) { MessageBox.Show("找不到服务器!"); return; } MessageBox.Show(obj.Greeting("易学网 www.vjsdn.com ")); } catch (Exception ex) { MessageBox.Show(ex.Message); } } 调用远程对象CommonService.GetOnlineList方法获取在线用户列表,返回DataTable类型数据。 源代码: private void btnCallService_Click(object sender, EventArgs e) { try { CommonService obj = (CommonService)Activator.GetObject(typeof(CommonService), txtUrl.Text + "/" + CommonService.ObjectURI); if (obj == null) { MessageBox.Show("找不到服务器!"); return; } //从远程服务器接受DataTable类型的数据 DataTable onlines = obj.GetOnlineList(); dataGridView1.DataSource = onlines; MessageBox.Show("获取数据成功1"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } 两个远程对象: 1.CommonService 对象 public class CommonService : System.MarshalByRefObject { /// <summary> /// 服务名称,对象的URI地址 /// </summary> public static string ObjectURI { get { return "CommonServiceURI"; } } /// <summary> /// 给客户端调用的接口 /// </summary> /// <param name="name"></param> /// <returns></returns> public DataTable GetOnlineList() { //从SQL后台获取数据...省略... DataTable dt = new DataTable(); dt.Columns.Add("UserID", typeof(string)); dt.Rows.Add(new object[] { "易学原创" }); dt.Rows.Add(new object[] { "小猫" }); dt.Rows.Add(new object[] { "楚楚" }); return dt; } } 2.HelloData 对象 public class HelloData : System.MarshalByRefObject { /// <summary> /// 服务名称,对象的URI地址 /// </summary> public static string ObjectURI { get { return "HellURI"; } } /// <summary> /// 给客户端调用的接口 /// </summary> /// <param name="name"></param> /// <returns></returns> public string Greeting(string name) { return "您好!" + name; } } Source Code:
参考文档:
C#实现QQ/MSN等客户端聊天软件从右下角弹出窗体(Popup Window) ADO Direct(直连模式)能不能改成客户端在服务端注册后再访问数据库 解决方案:WCF客户端无法获取服务端抛出的异常详细信息 3.0高级版:客户端无法获取服务端抛出的异常详细信息 WCF客户端和服务端配置要点 CSFramework WebApi服务端框架成功案例-建行底层支付系统+i蜜书收银助手客户端 WebApi服务端开发框架成功案例-对接三方支付平台连连支付C#.NET VS.NET后端框架,C#.NET开发的服务器端开发框架 - C/S框架网 C#.NET IP端口绑定SSL证书支持HTTPS协议(用于Win服务自承载WebApi服务器) - C/S框架网原创 C# ASP.NET WebApi服务器搭建详解 - IIS服务承载(IIS Hosting IIS宿主) C# ASP.NET WebApi服务器搭建详解 - 自承载(Self Hosting) Asp.Net开源服务端框架,WebApi后端框架标准版 微信小程序后端框架 | C# ASP.NET服务端WebApi快速开发框架平台 WCF开发环境客户端调试服务端跟踪代码不能命中断点解决方案 .Net开发服务器服务端应用程序 - WebApi后端开发框架
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |