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 对象
{
/// <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 对象
{
/// <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:
.NET构架下Remoting和WebService技术区别
C#.NET 6 实现全局异常处理-C/S开发框架
C# ASP.NET使用ashx一般处理程序实现上传文件功能-C/S开发框架
C# .Net Core实现RedisClient
软件开发与设计 - EMS-电子商城系统-ASP.NET车站售票系统的设计与实现(毕业设计)
ASP.NET WebApi框架异步实现MultipartContent方式上传文件
【原创】C# 深度拷贝对象 使用.NET反射+递归原理实现深度克隆
C#.NET C/S结构版本自动升级解决方案之升级包实现
C#.NET 监视操作系统打开程序(使用Window消息实现全局系统勾子)
C#.Net版本自动更新程序及3种策略实现
C# ASP.NET 实现文件断点续传
C#.Net CS开发框架实现多语言(C/S框架网)
Asp.Net FileUpload类实现上传文件(C/S框架网开源)
Winform三层架构+WebService+权限管理系统软件开发平台(C#.NET开发)
C#.NET C/S结构版本自动升级解决方案之升级策略
C#.NET C/S结构版本自动升级解决方案2.0详解 (一)
什么是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内容管理系统 |
在线客服
