NET面试题大全,包括微软、华为、中兴等大企业的面试真题

简要地写出一个.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(\客户端信息:\ }

//该方法可返回字符串 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), \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), \ }

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解决方案中

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4