完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
简要地写出一个.NET Remoting的示例 【考点】 .NET Remoting程序的原理,.NET Remoting的基本编写方法。 【出现频率】 ★★☆☆☆ 【解答】 在VS 2008中添加新的类库项目,并命名为NetRmClass,将所属解决方案命名为NetRm,勾选“创建解决方案的目录”。这样,NetRmClass类库项目目录即属于NetRm解决方案,并可以继续向该解决方案添加更多的其他相关项目。类库项目在这里仅用于创建一个远程对象的类,将项目中的cs文件命名为RmObj,其包含的类型同样为RmObj,编写RmObj.cs如代码13.4所示。 代码13.4 远程对象类定义 :RmObj.cs using System; using System.Windows.Forms; namespace NetRmClass { public class RmObj : MarshalByRefObject { //在构造函数中,用提示窗口提示双方用户远程对象创建成功 public RmObj() { MessageBox.Show("远程对象已经创建", "提示信息"); } //调用Diss方法,会在服务器端的控制台程序中输出方法参数 public void Diss(string msg) { Console.WriteLine("客户端信息:"+msg); } //该方法可返回字符串 public string Disc() { return "与服务器端完成通信"; } } } 将NetRm解决方案中的NetRmClass项目进行编译(VS 2008中选择菜单栏的“项目|生成”命令,快捷键为Crtl+F6),即可在该项目目录中的“binDebug”路径下生成编译后的NetRmClass.dll程序集。 在VS 2008中的NetRm解决方案再次添加新的控制台应用程序项目,并命名为NetRmServer。该项目所生成的程序集作为Remoting的服务器端,首先需要添加“NetRmClass.dll”程序集引用,并导入NetRmClass命名空间,编写该项目的Program.cs如代码13.5所示。 代码13.5 Remoting服务器端程序:Program.cs using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; using NetRmClass; namespace NetRmServer { class Program { //声明TcpServerChannel类型的静态字段channels static TcpServerChannel channels; static void Main(string[] args) { //创建新的TcpServerChannel对象,端口号为3000,引用为channels channels = new TcpServerChannel(3000); //将channels注册到信道服务 ChannelServices.RegisterChannel(channels, false); //创建知名服务类型的对象,传递远程对象的类型、对象URI和激活对象的枚举成员 RemotingConfiguration.RegisterWellKnownServiceType(typeof(RmObj), "MyUri", WellKnownObjectMode.Singleton); //信息提示,当用户输入字符,则结束程序 Console.WriteLine("======服务器端已启动======"); Console.Read(); } } } 添加“NetRmClass.dll”程序集引用后,该程序集的副本即被复制到NetRmServer项目目录中的“binDebug”路径下,以供NetRmServer项目生成的程序集使用。将NetRm解决方案中的NetRmServer项目进行编译,即可在该项目目录中的“binDebug”路径下生成编译后的NetRmServer.exe程序集。 在VS 2008中的NetRm解决方案再次添加新的Windows窗体应用程序项目,并命名为NetRmClient。该项目所生成的程序集作为Remoting的客户端,首先仍然需要添加“NetRmClass.dll”程序集引用,并导入NetRmClass命名空间。在“Form1”窗体的设计视图中添加一个Button控件和TextBox控件,分别命名为“button1”和“textBox1”,编写Form1.cs如代码13.6所示。 代码13.6 Remoting客户端程序:Form1.cs using System; using System.Windows.Forms; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; using NetRmClass; namespace NetRmClient { public partial class Form1 : Form { //声明TcpClientChannel类型的字段channelc TcpClientChannel channelc; //声明RmObj类型的字段obj RmObj obj; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //创建TcpClientChannel对象,引用为channelc channelc = new TcpClientChannel(); //将channels注册到信道服务 ChannelServices.RegisterChannel(channelc, false); //创建远程对象 obj = (RmObj)Activator.GetObject(typeof(RmObj), "tcp://localhost:3000/MyUri"); } private void button1_Click(object sender, EventArgs e) { string MyName = textBox1.Text; //调用远程对象的Diss方法,并传递用户输入值 obj.Diss(MyName); //调用远程对象的Disc方法,返回值赋值给textBox1控件的“Text”属性 this.textBox1.Text = obj.Disc(); } } }; 添加“NetRmClass.dll”程序集引用后,该程序集的副本同样被复制到NetRmClient项目目录中的“binDebug”路径下,以供NetRmClient项目生成的程序集使用。将NetRm解决方案中的NetRmClient项目进行编译,即可在该项目目录中的“binDebug”路径下生成编译后的NetRmClient.exe程序集。 至此,一个简单的.NET Remoting应用解决方案已完成,其中服务器端为控制台程序,客户端为Windows窗体程序。服务器端所指定的位置是“localhost”,也可以根据程序需要更改为IP地址。 【分析】 本题主要考查面试者对Remoting应用原理的认识,该解答并不适宜于直接应用于实际开发。当服务器端程序运行后(即运行NetRmServer.exe),用户在客户端程序中输入一些文本,并单击“button1”按钮,服务器端程序和客户端程序运行效果如图13.4所示。 图13.4 .NET Remoting应用示例 解答所编写的.NET Remoting应用用于在本机上测试,不过已经展示了.NET Remoting技术的基本编写方法。通过示例,可以清楚理解该技术的强大功能以及灵活性,但是需要编程者编写大量的代码,并且需要一致的运行环境支撑。 |
|
相关推荐
1 个讨论
|
|
WCF技术有什么优势
【考点】 对WCF技术的了解,WCF技术的基本内容。 【出现频率】 ★★☆☆☆ 【解答】 常用的分布式技术有COM+、.NET远程技术(Remoting)、Web Service和微软消息队列服务,WCF技术将这些分布式技术整合为一个高效的API。常用的那些分布式技术只能解决项目开发中某个方面的问题,并且不同技术对平台要求不同。在项目中有时要使用到多种技术从而导致这些技术所提供的服务有重叠之处,并且整个项目的维护复杂性大大增加。WCF技术提供了一个完整统一的方案解决这些问题,它提供了一个用于访问各种分布式技术的通用API,并且增加了很多必要的服务。 【分析】 本题主要考查面试者对.NET Framework新版本中WCF技术的基本认知。公司招聘.NET程序员不一定非要熟练掌握WCF这样的新技术,但是一定会要求所招聘的人才具备对新技术的了解,对新技术探索的好奇心。本题即为这样的目的而设,难度不大,只要面试者对新技术有一定程度的了解,经过短时间的培训即可掌握,其考查重点在于面试者的知识广度。 |
|
|
|
|
|
只有小组成员才能发言,加入小组>>
12182 浏览 2 评论
4504 浏览 3 评论
3754 浏览 5 评论
9769 浏览 47 评论
4594 浏览 9 评论
748浏览 0评论
558浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 03:32 , Processed in 0.677179 second(s), Total 51, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号