ASP.NET Remoting体系结构(八): 构建远程类对象
构建远程类对象
(1)在VS2005中新建一个项目,选择Windows窗体模板,将窗体的输出类型设置为类库并命名为RemotingClass,同时将应用程序的输出类型改为类库,如图1所示。
(2)将窗体类改为FarClass并在窗体代码文件中加入如下代码:
namespace RemotingClass
{
public partial class FarClass : Form
{
public static int i;
public FarClass()
{
InitializeComponent();
}
public int GetTime()
{
StreamWriter sw = new StreamWriter("hb.txt", True);
sw.WriteLine("远程类对象被第" + i + "次调用" + DateTime.Now.ToString());
sw.Close();
i++;
MessageBox.Show("远程类在服务器端对象被"+i+"次调用"+DateTime.Now.ToString());
return i;
}
}
}
如果是用户编写的远程类,则必须继承System.MarshalByRefObject。因为Form类已经继承于System.MarshalByRefObject,所以本例没有继承。代码如下:
public static int i;
制作一个计数器,来记录远程类对象被调用了几次,代码如下:
StreamWriter sw = new StreamWriter("hb.txt", True);
sw.WriteLine("远程类对象被第" + i + "次调用" + DateTime.Now.ToString());
sw.Close();
StreamWriter是一个专门用于文件写入的类,这里用来对远程类的调用做一个记录以便体会远程调用的这种体系。StreamWriter("hb.txt", True) 构造函数中的第一个参数为文件名,第二个参数如果为True,则表示在文件末尾追加;fasle表示写入的内容要覆盖以前内容。sw.WriteLine()函数是用来将一个字符串写入一行。DateTime.Now.ToString()是系统当前时间。最后将Stream Writer对象的实例关闭。代码如下:
MessageBox.Show("远程类在服务器端对象被"+i+"次调用"+DateTime.Now.ToString());
在弹出的MessageBox中,在服务端看到客户端调用远程类,每调用一次就可以看到服务端弹出的窗体以显示远程类的调用。
(3)编译程序生成类库。
完整程序代码如下:
★ ★★★★Program.cs主程序文件完整程序代码★★★★★
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace RemotingClass
{
static class Program
{
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FarClass());
}
}
}
★ ★★★★RemotingClass.cs窗体代码文件完整程序代码★★★★★
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace RemotingClass
{
public partial class FarClass : Form
{
public static int i;
public FarClass()
{
InitializeComponent();
}
public int GetTime()
{
StreamWriter sw = new StreamWriter("hb.txt", true);
sw.WriteLine("远程类对象被第" +i + "次调用" + DateTime.Now.ToString());
sw.Close();
i++;
MessageBox.Show("远程类在服务器端对象被"+i+"次调用"+DateTime.Now.ToString());
return i;
}
}
}
★ ★★★★RemotingClass.designer.cs窗体设计文件完整程序代码★★★★★
namespace RemotingClass
{
partial class FarClass
{
///
/// 必需的设计器变量。