Remoting简单实例[]
转载自:[http://user.qzone.qq.com/51566219]
一、实用类:
1、System.MarshalByRefObject :
系统中远程调用的对象必须是从MarshalByRefObject对象中派生出来的;
2、System.Runtime.Remoting.Channels.Tcp.TcpServerChannel :
服务器端的Tcp信道;
3、System.Runtime.Remoting.Channels.Http.HttpServerChannel :
服务器端的Http信道;
4、System.Runtime.Remoting.Channels.ChannelServices :
注册信道,使之可用于远程对象;
5、System.Runtime.Remoting.RemotingConfiguration.RegisterWellKnowServiceType :
指定远程对象中类的类的类型,客户机使用的URI和模式;
6、System.Runtime.Remoting.Channels.Tcp.TcpClientChannel :
客户端的Tcp信道;
7、System.Runtime.Remoting.Channels.Http.HttpClientChannel :
客户端的Http信道。
二、简单的示例
1、创建远程对象,在这里创建一个dll程序集,这个dll在服务器和客户机代码中都会用到。
创建名为RemoteHello.dll的程序集
using System;
using System.Collections.Generic;
using System.Text;
namespace RemoteHello
{
public class Hello:System.MarshalByRefObject
{
public Hello()
{
Console.WriteLine("Constructor called");
}
~Hello()
{
Console.WriteLine("Destructor called");
}
public string HelloWorld(string name)
{
Console.WriteLine("Hello World!");
return "Hi," + name;
}
}
}
2、创建服务器。需要引用System.Runtime.Remoting程序集和之前创建的RemoteHello.dll程序集。在此创建名为HelloServer的Console Application。
名字空间是对象所需要的。请记住,如果得到System.Runtime.Remoting.Channels.Tcp名字空间不存在的信息,请检查是否添加了对System.Runtime.Remoting.dll的引用。
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteHello;
namespace HelloService
{
class HelloServer
{
static void Main(string[] args)
{
TcpServerChannel channel = new TcpServerChannel(6666);
//ChannelServices.RegisterChannel(channel);
ChannelServices.RegisterChannel(channel,false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Hello), "HelloWorld", WellKnownObjectMode.SingleCall);
System.Console.WriteLine("Press Any Key to Exit ! ");
System.Console.ReadLine();
}
}
}
上面代码中可以用
ChannelServices.RegisterChannel(channel);
ChannelServices.RegisterChannel(channel,false);
但是在.NET Framework 2.0中编译时会提示
'System.Runtime.Remoting.Channels.ChannelServices.RegisterChannel(System.Runtime.Remoting.Channels.IChannel)' is obsolete: 'Use System.Runtime.Remoting.ChannelServices.RegisterChannel(IChannel chnl, bool ensureSecurity) instead.'
原因是是.NET Framework 2.0新增的函数
System.Runtime.Remoting.ChannelServices.RegisterChannel(IChannel chnl, bool ensureSecurity)
其中参数:ensureSecurity
如果启用了安全,则为 true;否则为 false。将该值设置为 false 将不会使在 TCP 或 IPC 信道上所做的安全设置无效。
此外MSDN中注释:对于 TcpServerChannel,将 esureSecurity 设置为 true 将在 Win98 上引发异常(因为 Wi9x 上不支持安全 tcp 信道);对于 Http 服务器信道,这样会在所有平台上引发异常(如果想要安全的 http 信道,用户需要在 IIS 中承载服务)。
3、创建客户机。需要引用System.Runtime.Remoting程序集和之前创建的RemoteHello.dll程序集
在此创建名为HelloClient的Console Application
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteHello;
namespace HelloClient
{
class HelloClient
{
static void Main(string[] args)
{
ChannelServices.RegisterChannel(new TcpClientChannel(), false);
Hello obj = (Hello)Activator.GetObject(typeof(Hello), "tcp://localhost:8085/Hi");
");
if (obj == null)
{
Console.WriteLine("False to Link Server.");
return;
}
for (int i = 0; i < 6; i++)
{
Console.WriteLine(obj.HelloWorld("MadRam.neo"));
}
}
}
}
注:
1、本实例在客户端运行HelloClient,但是要在服务器上远程对象注册之后,使服务器上的HelloClient服务一直处于运行状态,直到按任意键为止,否则会出错!
2、将代码中的“tcp://localhost:8085/Hi"”换成其他网址就可以运行在网络上,比如换成:tcp://192.168.3.235:8085/Hi"。
3、能作为远程服务的只能是dll,exe可不行;
Remoting简单实例[]相关推荐
- java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码
jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...
- js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称
1,列举对象属性的名称 <script language="javascript"> var obj=new Object(); obj.a="您好,我是田洪 ...
- 关于webservice的异步调用简单实例
于webservice的异步调用简单实例 无论在任何情况下,被调用方的代码无论是被异步调用还是同步调用的情况下,被调用方的代码都是一样的, 下面,我们就以异步调用一个webservice 为例作说明. ...
- (三)AJAX基本介绍和简单实例03
(三)AJAX基本介绍和简单实例03-----Ajax与数据库的动态应用 前台显示界面: 选择所有客户之后: 选择其中一个客户---杜森: Demo03.html代码 <html> < ...
- protobuf和socket通信简单实例
protobuf和socket通信简单实例 protobuf是 Google 公司内部的混合语言数据标准,可以用来定义通信的协议,由于其有序列化和反序列化的操作,减小了存储或通信的数据量,从而达到 ...
- 转载 jsonrpc环境搭建和简单实例
jsonrpc环境搭建和简单实例 一.环境准备 下载需要的jar包和js文件,下载地址:https://yunpan.cn/cxvbm9DhK9tDq 访问密码 6a50 二.新建一个web工程,j ...
- spring之AOP的简单实例
AOP:面向切面编程,就是把除去业务部分以外的东西单独模块化,比如打日志等,就像学生信息的增删改查,可以把输出日志单独模块化出来,通过切面对的方式进行编程. 在进行实例编写之前先进行一些专业术语的了解 ...
- Hibernate搭建开发环境+简单实例(二)
2019独角兽企业重金招聘Python工程师标准>>> Hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hiber ...
- WPF MvvmLight简单实例(1) 页面导航
原文:WPF MvvmLight简单实例(1) 页面导航 实现了那些功能,先看看截图: 操作描述: 在程序运行后,点击"Load"按钮,页面会加载PageOne,点击PageOne ...
最新文章
- 中国超导产业投资风险及应用前景调研报告2021版
- Mybatis 动态sql语句(if标签和where标签)
- 计算机二级基础知识教材,国家计算机二级考试公共基础知识教材
- linux--几种常见的进程调度算法
- 01-gt;选中UITableViewCell后,Cell中的UILabel的背景颜色变成透明色
- 三万字速通SSM框架入门知识点,快速上手CRUD
- java 课后习题 找零钱
- Python菜鸟入门:day07条件循环
- linux如何rpm更新内核,使用RPM包对RedHat进行内核升级
- 最长回文子序列与最长回文子串
- [转载] 重新抛出异常与 public Throwable fillInStackTrace()
- 找工作必做事项-剑指offer
- Apache整合Tomcat详解系列(三)Apache性能调优
- css实现长英文字母自动换行
- 手机控制云服务器文件,手机控制云服务器的app
- 解决MySQL的Unknown system variable ‘tx_isolation‘
- Go语言管道与高并发实战
- LeetCode 2296. 设计一个文本编辑器(双栈)
- java编写周易demo
- Problem F: 凹凸四边形