【考点】
.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),即可在该项目目录中的“bin/Debug”路径下生成编译后的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项目目录中的“bin/Debug”路径下,以供NetRmServer项目生成的程序集使用。将NetRm解决方案中的NetRmServer项目进行编译,即可在该项目目录中的“bin/Debug”路径下生成编译后的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项目目录中的“bin/Debug”路径下,以供NetRmClient项目生成的程序集使用。将NetRm解决方案中的NetRmClient项目进行编译,即可在该项目目录中的“bin/Debug”路径下生成编译后的NetRmClient.exe程序集。
至此,一个简单的.NET Remoting应用解决方案已完成,其中服务器端为控制台程序,客户端为Windows窗体程序。服务器端所指定的位置是“localhost”,也可以根据程序需要更改为IP地址。
【分析】
本题主要考查面试者对Remoting应用原理的认识,该解答并不适宜于直接应用于实际开发。当服务器端程序运行后(即运行NetRmServer.exe),用户在客户端程序中输入一些文本,并单击“button1”按钮,服务器端程序和客户端程序运行效果如图13.4所示。
图13.4 .NET Remoting应用示例
解答所编写的.NET Remoting应用用于在本机上测试,不过已经展示了.NET Remoting技术的基本编写方法。通过示例,可以清楚理解该技术的强大功能以及灵活性,但是需要编程者编写大量的代码,并且需要一致的运行环境支撑。
分享到:
相关推荐
演示如何使用.net Remoting示例,从而更好的学习和使用.net Remoting
一个C#.NET Remoting示例 ChannelServices.RegisterChannel(new TcpChannel(9090), true); RemotingConfiguration.ApplicationName = "HelloServiceApplication"; RemotingConfiguration....
C# .Net Remoting 两个简单示例,一个为普通的,一个为工厂模式的,更为安全一点.简单范例却是打好了一个框架,想要做东西,扩展就可以了. 使用说明和运行截图:http://www.our-code.com/news/2010105/n4920152.html 关于2...
初接触.NET Remoting的人多半会有这样的疑问,因为大部分的文章和书籍在介绍.NET Remoting时都只介绍了通道,对象,激活和生存周期等等概念,在谈到如何进行远程通信的时候,都只告诉读者如何从客户端激活一个服务器...
Microsoft .NET RemotingMicrosoft .NET Remoting Microsoft .NET RemotingMicrosoft .NET Remoting Microsoft .NET RemotingMicrosoft .NET Remoting
一个.NET Remoting的简单实例,源码,打开即用,适合新手和做测试的相关技术人员。
VB.NET Remoting 技术手册VB.NET Remoting 技术手册
Microsoft .Net Remoting系列专题
Advanced .NET Remoting.pdf
一个很简单的.net remoting 实例,如果你懂得这种技术建议你就不用下了,这个只是知道.net remoting ,但是不知道什么原理的同学下载学些,知道是如何进行操作的。代码包含服务端、客户端和接口实例。简单的描述了...
.Net Remoting技术.pdf
介绍.net下的Remoting技术. Microsoft .Net Remoting系列专题之一
基于.NET Remoting实现了一个工作在局域网的聊天室程序,包含一个.NET SVR,客户端(窗口程序)。 程序充分演绎了.net remoting事件双向订阅的应用方法。
.Net Remoting非常简单范例代码
基于.NET Remoting的分布式系统实现.pdf
Advanced .NET Remoting_2nd.pdf
深度挖掘.NET Framework 2.0(8):实战.NET Remoting(下)
看名字就该知道什么内容了吧,属于VB.NET高级点的资料,有需求的下好了!
Advanced .NET Remoting 第二版, 内容为纯英文,有兴趣的朋友可以下来看看。
VB.NET Remoting 技术手册.rar