简要地写出一个.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) {
var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);
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的示例的更多相关文章
- 输入一个数字n 如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数 写出一个函数
题目: 输入一个数字n 如果n为偶数则除以2,若为奇数则加1或者减1,直到n为1,求最少次数 写出一个函数 首先,这道题肯定可以用动态规划来解, n为整数时,n的解为 n/2 的解加1 n为奇数时 ...
- java————数组 简单写出一个管理系统
数组的特点 1, 数组是一块连续的空间,下标描述空间的位置. 2, 下标从0开始,最大下标为数组长度—1.(*.length-1) 3, 数组元素都是变量.(就是每个下标对应的内容).变量的类型 ...
- 如何写出一个让人很难发现的bug?
程序员的日常三件事:写bug.改bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含bug. 那么如何写出一个让(坑)人(王)很(之)难(王)发现的bug呢? - 1 -新手开发+ ...
- 浅谈如何写出一个让(坑)人(王)很(之)难(王)发现的bug
该文章内容来自脚本之家,原文链接:https://www.jb51.net/news/598404.html 程序员的日常三件事:写bug.改bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因 ...
- 请写出一个超链接,点击链接后可以向zhangsan@d-heaven.com发送电子邮件。
请写出一个超链接,点击链接后可以向zhangsan@d-heaven.com发送电子邮件. <a href=”mailto: zhangsan@d-heaven.com”>发邮件</ ...
- 2019-8-31-C#-如何写出一个不能被其他程序集继承的抽象类
title author date CreateTime categories C# 如何写出一个不能被其他程序集继承的抽象类 lindexi 2019-08-31 16:55:58 +0800 20 ...
- JS函数 编程练习 使用javascript代码写出一个函数:实现传入两个整数后弹出较大的整数。
编程练习 使用javascript代码写出一个函数:实现传入两个整数后弹出较大的整数. 任务 第一步: 编写代码完成一个函数的定义吧. 第二步: 我们来补充函数体中的控制语句,完成函数功能吧. 提示: ...
- C# 如何写出一个不能被其他程序集继承的抽象类
我需要限定某个抽象类只能在我程序集类实现,而不支持其他程序集实现,也就是我需要一个不能被继承的抽象类 在 C# 里面有抽象类和接口,这两个都是期望被继承才能被使用,而抽象类是可以做到只能在自己程序集和 ...
- 用js写出一个漂亮的单选框选中效果
一般的input框比较简单,我们可以用JavaScript配合css背景图片定位让我们模拟写出一个点击选中效果 首先需要有个图片素材,当页面加载的时候是背景图片定位到左图,当我们点击图片的时候,背景图 ...
随机推荐
- PartialView
一.客户端直接请求分部视图(如使用AJAX) Return PartialView() 不加载布局页面,不执行_ViewStart.cshtml AJAX /Home/LoginPart 二.视图 ...
- c++builder 代码输入助手
c++builder 代码输入助手 指针箭头.指针符号-> 输入太麻烦 java.c#.delphi 语音,输入. 一个字符,就可以弹出代码提示窗口.很是方便. c++,输入->,需要按3 ...
- 转】MyEclipse使用总结——使用MyEclipse打包带源码的jar包
原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4136303.html 感谢! 平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不 ...
- 1001Sum Problem
Time Limit: 1000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): ...
- vimdiff
[vimdiff] 启动方法 首先保证系统中的diff命令是可用的.Vim的diff模式是依赖于diff命令的.Vimdiff的基本用法就是: # vimdiff FILE_LEFT FILE_RIG ...
- B - Kefa and Company
B - Kefa and Company Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I6 ...
- ajax提交后台自动反序列化成对象
下面是ajax提交的方法,主要用到了$form.serializeArray()将表单序列化成json对象,然后用each处理一下,代码如下: var $form = $('<form>& ...
- 数据库:mongodb与关系型数据库相比的优缺点
与关系型数据库相比,MongoDB的优点:①弱一致性(最终一致),更能保证用户的访问速度:举例来说,在传统的关系型数据库中,一个COUNT类型的操作会锁定数据集,这样可以保证得到“当前”情况下的精 ...
- Holding Bin-Laden Captive!_hdu_1085(DP).java
/* * 9607741 2013-11-17 18:04:23 Accepted 1085 187MS 5700K 1251 B Java zhangyi http://acm.hdu.edu. ...
- CString和string的互相转换
CString->std::string 例子: CString strMfc=“test“; std::string strStl; strStl=strMfc.GetBuffer(0); s ...