关于Remoting的个人使用心得
最经几天比较闲写了一个基于Tcp网络通信的聊天程序,写的过程中实现了文件传输,可是却怎样也无法将文件名传送过去,期间想过用通信的端口发送文件的名称,但是又要自己定义一个协议,觉得那样比较麻烦,于是想到了Remoting。
于是就开始了Remoting的研究之路 ,只是简单的用了一下,也只是入门希望可以帮助到刚入门Remoting的同学们。
在这里我写了一个模板类 ,你们拿去可以直接使用 废话不多说了 全是干货。
这是一个自己写的一个模版类
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp; namespace NetChatLib
{
/// <summary>
/// 用于Remoting的连接与释放
/// </summary>
public class Remoting_Helper
{
/// <summary>
/// 服务端激活Remoting
/// </summary>
/// <typeparam name="T">类的类型</typeparam>
/// <param name="port">端口号</param>
/// <returns></returns>
public bool Serivce<T>(int port)
{
//这里将通过反射获取T的类型的字符串
T type = (T)Activator.CreateInstance(typeof(T));
//这里需要注意子类即使重写了GetType 也不行
//系统调用的仍然是Object的GetTtpe
string str = type.GetType().ToString();
str = str.Split('.')[];
try
{
TcpServerChannel chnl = new TcpServerChannel("talkChannel", port);
ChannelServices.RegisterChannel(chnl, true);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(T), str, WellKnownObjectMode.SingleCall);
return true;
}
catch
{
return false;
} }
/// <summary>
/// 客户端激活Remoting
/// </summary>
/// <typeparam name="T">类的类型</typeparam>
/// <param name="url">类型所在宿主位置</param>
/// <returns>该类的实例</returns>
public T Client<T>(string url)
{
try
{
TcpClientChannel chnl = new TcpClientChannel();
ChannelServices.RegisterChannel(chnl, true);
T cls = (T)Activator.GetObject(typeof(T), url);
return cls; }
catch
{
return default(T);
} }
}
}
这是使用的方法
客户端 DemoClass是我测试的一个类
static void Main(string[] args)
{
string url = "tcp://172.16.22.22:12346/DemoClass";
DemoClass cls = new Remote_help().Client<DemoClass>(url);
cls.SetName("你好世界");
Console.Read();
}
服务器端
static void Main(string[] args)
{
new Remote_help().Serivce<DemoClass>();
Console.WriteLine("服务开启");
Console.ReadKey();
Console.WriteLine(new DemoClass().GetName());
Console.ReadKey();
}
我的DemoClass测试类
public class DemoClass : MarshalByRefObject
{
private int count = ;
private static string name; public void SetName(string name)
{
DemoClass.name = name;
}
public string GetName()
{
return DemoClass.name;
} public DemoClass()
{
Console.WriteLine("------DemoClassConstructor-------");
}
public void showCount(string name)
{
count++;
Console.WriteLine("{0} The Count is {1}", name, count);
}
public void showAppDomain()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
Console.WriteLine(currentDomain.FriendlyName);
}
public int GetCount()
{
return count;
}
}
最近使用发现了一个问题 :在不同计算机上启动Remoting服务失败的结果
解决方法:将ChannelServices.RegisterChannel(chnl, true);true 改为false
如果还是不行,就换Http协议进行传输就好了
关于Remoting的个人使用心得的更多相关文章
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- NoSql数据库使用半年后在设计上面的一些心得
NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...
- spring remoting源码分析--Hessian分析
1. Caucho 1.1 概况 spring-remoting代码的情况如下: 本节近分析caucho模块. 1.2 分类 其中以hession为例,Hessian远程服务调用过程: Hessian ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(三) 查看字段长度
我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(四) 数据类型
我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(五) 运算符
我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...
- 我的MYSQL学习心得(六) 函数
我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 我的MYSQL学习心得(七) 查询
我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
随机推荐
- BZOJ4292 PA2015 Równanie 【暴力水题】
BZOJ4292 PA2015 Równanie Description 对于一个正整数n,定义f(n)为它十进制下每一位数字的平方的和.现在给定三个正整数k,a,b,请求出满足a<=n< ...
- WordCount运行详解
1.MapReduce理论简介 1.1 MapReduce编程模型 MapReduce采用"分而治之"的思想,把对大规模数据集的操作,分发给一个主节点管理下的各个分节点共同完成,然 ...
- openOffice转换的时候乱码在linux下使用openOffice的时候发现在转换后出现了乱码
openOffice转换的时候乱码 在linux下使用openOffice的时候发现在转换后出现了乱码,最后上网查了一下,按照网上的说法去试了试,最后也没有解决,也可能是我这边的linux的权限问题, ...
- autoreconf报错LC_ALL和LANGUAGE未设置
报错提示: merlin@ubuntu:/opt/smbshared/projects/x86test/openvpn/openvpn-release-2.4$ autoreconf -i -v -f ...
- elasticsearch 6.0.0及之后移除了一个索引允许映射多个类型的操作(Removal of mapping types)
分给线一下内容为理解错误内容,实际允许建立父子分档,只是类型改成来 join 官方demo: join datatypeedit The join datatype is a special fiel ...
- SQL中利用脚本恢复数据库
SQL中利用脚本恢复数据库 编写人:CC阿爸 2014-6-15 在日常SQL数据库的操作中,如何恢复数据库 use master drop database SCS1 RESTORE DATAB ...
- Linux之安装软件
1. 下载获得redis-3.0.4.tar.gz后将它放入我们的Linux目录/opt 2. 在SecureCRT界面上点SecureFX图标 在本地窗口中找到要上传的文件 在要上传的文件上点右键 ...
- laravel 环境自编译过程
[原创] 看到此文的朋友看完后也许会失望,但我尽最大努力不让搜友们失望,以下是自己操作的笔记用以整理提高 虽然 laravel 官方已给出了安装 laravel 框架所需的环境盒子 使用Vagrant ...
- Hive使用druid做连接池代码实现
配置文档 hive_jdbc_url=jdbc:hive2://192.168.0.22:10000/default hive.dbname=xxxxx hive_jdbc_username=root ...
- spring cache之自定义keys的过期时间
spring @cacheable注解默认不支持方法级别的缓存失效时间,只能通过配置来配置全局的失效时间 如果需要实现对方法级别的缓存支持失效时间机制,有一种比较简单的方法,spring配置文件如下: ...