分布式实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术学院
实验报告
(学年度第学期)
课程名称分布式
实验名称分布式实验
姓名学号
专业计算机班级
地点教师
实验一:.NET Remoting
一:实验目的和要求:
目的:所谓.NET Remoting就是跨应用程序域边界调用程序集。Remoting服务端承载远程对象,使外界能与之通信,对外的信道可以是HTTP、TCP或者IPC。而我在此次试验中选择的是TCP。最基本的.NET Remoting应用程序应该由三部分构成:
∙服务端。承载远程对象。
∙远程对象。需要跨应用程序域边界调用的程序集。
∙客户端。用于调用远程对象。
此次实验就是要在掌握的理论基础之上实现远程调用。
要求:1.进行实验预习工作;
2.准备实验必须的完整程序流程及源代码;
3.上机编程,调试程序,得到实验结果;
4.写出实验报告
二:实验环境:
Visual Studio 2010
三:实验步骤:
首先下载安装Visual Studio 2010,此过程比较简单,在这就不介绍了。
远程对象是根本,服务端只是一个载体,那么我们就先要创建一个简单的远程对象:1.打开Visual Studio 2010,在在主界面中选择文件,选择“新建”→“项目”命令,新建一个Remoting类库项目。
2.把默认的Class1.cs重命名为RemoteObject.cs,打开cs文件,修改代码为:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Remoting
{
publicclass MyObject:MarshalByRefObject
{
//减法
publicint Sub(int a, int b)
{
return a - b;
}
//获得服务器时间
publicstring GetDate()
{
return DateTime.Now.ToString();
}
}
}
在创建了远程对象后就需要创建Remoting服务端来发布这个远程对象了。
3.我使用Windows应用程序做服务端。在解决方案中新建一个名为RemotingServer的控制台应用程序,把Program.cs修改成如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace RemotingServer
{
staticclass Program
{
///应用程序的主入口点
[STAThread]
staticvoid Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new RemotingServer());
}
}
}
4.使用.NET Remoting发布远程对象并不复杂,首先需要告知程序使用哪种信道发布远程对象。在这里我们选择TCP信道,并在40001端口通信。然后我们来完成用客户端应用程序调用远程对象。客户端应用程序使用应用程序作为客户端。
privatestaticstring RemotingMethod_1(int num1, int num2, outint result)
{
//声明远程服务端对象
Remoting.MyObject mo =
(Remoting.MyObject)Activator.GetObject(typeof(Remoting.MyObject), "tcp://localhost:40001/myObject");
//调用服务器端对象的方法
result = mo.Sub(num1, num2);
string date = mo.GetDate();
return date;
}
在这里,我们从远程地址tcp://localhost:40001/myObject创建远程对象,并调用了对象的Sub()方法。myObject就是在服务端中为知名对象起的名字。
5.在服务器端创建RemotingServer.cs,代码如下:
using System;
using System.Collections.Generic;
using ponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//需要在解决方案的引用中添加System.Runtime.Remoting
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
namespace RemotingServer
{
publicpartialclass RemotingServer : Form
{
public RemotingServer()
{
InitializeComponent();
}
privatevoid btnStart_Click(object sender, EventArgs e)
{
//注册服务端对象
RemotingConfig_1();
//显示消息
txtMessage.Text = "Congratulations ! \r\nRemoting服务启动成功;
//禁用服务启动按钮
btnStart.Enabled = false;
}
privatestaticvoid RemotingConfig_1()
{
//创建TCP信道,端口为40001
TcpChannel tc = new TcpChannel(40001);
//注册TCP信道
ChannelServices.RegisterChannel(tc, false);
//注册在服务器激活的知名对象wellKnown
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Remoting.MyObject), "myObject", WellKnownObjectMode.SingleCall);
}