- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C#Remoting详解远程对象.doc
近来在项目中 因为要涉及到 客户端和服务端的数据交互;
我们的项目中 的通讯组件 是我们的项目经理(彬哥)自己写的;
我有点看不懂,彬哥说要弄懂这块代码,要学会 Rmoting;
于是在 网上百度 关于 C# 的 Remoting代码;
最后找到了代码,并且在代码上加上了自己对代码的理解并且验证成功!!
我们先看 程序实现的功能:
客户端程序 和 服务端程序;(两个程序)
在服务端存在一个 单例对象, 客户端 从远程服务端获得了 这个对象,并且修改了 这个对象的值,结果 服务端 的这个值 被发现改变了….
——即,客户端 和 服务端 两个程序 ,在同时操作了 一个内存对象;
启动 服务端,点击 按钮:对象值是 “哈哈”
启动客户端, “获取远程对象” 得到值 “哈哈”
点击“修改远程对象” 再来获取远程对象 得到“花开花落”
——“花开花落”有没有 到达服务端,我们查看服务端的 值:
——即,达到了我们想要远程对象的目的!!
System.MarshalByRefObject
假如一个数据被序列化传递到了 客户端——那么,客户端接收到的,就是 一个 拷贝的副本;
——这时 修改客户端的对象的值,服务端将不会被影响;
(序列化的过程将 对象转换了一种格式,便于传输,到了客户端之后,再将便于传输的格式还原,这时还原的 对象和 服务端的对象 只是两个一摸一样的 不同对象);
(传输的是实际数据,所以要求传输对象[Serializable])
假如选择后者,那么 服务端的对象 将会 将这个对象的 引用(指针) 序列化传输到客户端,客户端反序列化得到了这个 指针,这个指针指向的是 服务端的对象;
所以客户端修改这个对象将会 修改到 服务端
——当然,Remoting 的方式绝不是我说的 “远程指针”这么简单,我的这种说法只是便于理解;
(传输的是 指针,所以和传输对象是不是 [Serializable] 没有关系)
验证:
为了验证我做了以下实验:
这是服务端和客户端传递数据的实体类
[Serializable]
public class TestModel : System.MarshalByRefObject
{
public string Name { get; set; }
}
[Serializable]
public class TestModel : System.MarshalByRefObject
{
public string Name { get; set; }
}
时,发现 客户端 的修改会影响 服务端(即 服务端和客户端公用的一个对象)
[Serializable]
public class TestModel // : System.MarshalByRefObject
{
public string Name { get; set; }
}
时,客户端修改之后,弹出的信息是“花开花落”,服务端却 依然是 “哈哈”(即,客户端只是得到了一个副本,客户端的修改没有影响服务端)
//[Serializable]
public class TestModel // : System.MarshalByRefObject
{
public string Name { get; set; }
}
时,程序报异常,说,传递的对象必须可以序列化之类;
好了,其余的都不再多说,我就直接将程序的源代码 嵌入到这个 Word文档中,
下载该文档,
点击 下面的 文件 Remoting.rar,即可提取出程序的源码:
下面,还是将 程序的源码堪出来(不过,很难看,还是下载该文档比较好):
客户端和服务端的 公共类(服务端和客户端都必须有的类)
using System;
using System.Collections.Generic;
using System.Text;
namespace ClassLibrary
{
//注意,一个普通的类如果想使其能够提供远程服务,必须继承 System.MarshalByRefObject
//Form 类则已经继承了该类
//程序集跟新以后,提供服务的服务器端和需要远程服务的客户端,由于添加了对其的引用,必须先运行,重新装载
[Serializable]
public class Class1 : System.MarshalByRefObject
{
//定义一个方法,供客户端调用
//该方法返回一个字符串给调用它的客户端程
文档评论(0)