【考点】
.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...
Microsoft .NET RemotingMicrosoft .NET Remoting Microsoft .NET RemotingMicrosoft .NET Remoting Microsoft .NET RemotingMicrosoft .NET Remoting
一个.NET Remoting的简单实例,源码,打开即用,适合新手和做测试的相关技术人员。
VB.NET Remoting 技术手册VB.NET Remoting 技术手册
初接触.NET Remoting的人多半会有这样的疑问,因为大部分的文章和书籍在介绍.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