转载自:[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简单实例[]相关推荐

  1. java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码

    jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...

  2. js入门·循环与判断/利用函数的简单实例/使用对象/列举对象属性的名称

    1,列举对象属性的名称 <script language="javascript"> var obj=new Object(); obj.a="您好,我是田洪 ...

  3. 关于webservice的异步调用简单实例

    于webservice的异步调用简单实例 无论在任何情况下,被调用方的代码无论是被异步调用还是同步调用的情况下,被调用方的代码都是一样的, 下面,我们就以异步调用一个webservice 为例作说明. ...

  4. (三)AJAX基本介绍和简单实例03

    (三)AJAX基本介绍和简单实例03-----Ajax与数据库的动态应用 前台显示界面: 选择所有客户之后: 选择其中一个客户---杜森: Demo03.html代码 <html> < ...

  5. protobuf和socket通信简单实例

    protobuf和socket通信简单实例   protobuf是 Google 公司内部的混合语言数据标准,可以用来定义通信的协议,由于其有序列化和反序列化的操作,减小了存储或通信的数据量,从而达到 ...

  6. 转载 jsonrpc环境搭建和简单实例

    jsonrpc环境搭建和简单实例 一.环境准备 下载需要的jar包和js文件,下载地址:https://yunpan.cn/cxvbm9DhK9tDq  访问密码 6a50 二.新建一个web工程,j ...

  7. spring之AOP的简单实例

    AOP:面向切面编程,就是把除去业务部分以外的东西单独模块化,比如打日志等,就像学生信息的增删改查,可以把输出日志单独模块化出来,通过切面对的方式进行编程. 在进行实例编写之前先进行一些专业术语的了解 ...

  8. Hibernate搭建开发环境+简单实例(二)

    2019独角兽企业重金招聘Python工程师标准>>> Hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hiber ...

  9. WPF MvvmLight简单实例(1) 页面导航

    原文:WPF MvvmLight简单实例(1) 页面导航 实现了那些功能,先看看截图: 操作描述: 在程序运行后,点击"Load"按钮,页面会加载PageOne,点击PageOne ...

最新文章

  1. 中国超导产业投资风险及应用前景调研报告2021版
  2. Mybatis 动态sql语句(if标签和where标签)
  3. 计算机二级基础知识教材,国家计算机二级考试公共基础知识教材
  4. linux--几种常见的进程调度算法
  5. 01-gt;选中UITableViewCell后,Cell中的UILabel的背景颜色变成透明色
  6. 三万字速通SSM框架入门知识点,快速上手CRUD
  7. java 课后习题 找零钱
  8. Python菜鸟入门:day07条件循环
  9. linux如何rpm更新内核,使用RPM包对RedHat进行内核升级
  10. 最长回文子序列与最长回文子串
  11. [转载] 重新抛出异常与 public Throwable fillInStackTrace()
  12. 找工作必做事项-剑指offer
  13. Apache整合Tomcat详解系列(三)Apache性能调优
  14. css实现长英文字母自动换行
  15. 手机控制云服务器文件,手机控制云服务器的app
  16. 解决MySQL的Unknown system variable ‘tx_isolation‘
  17. Go语言管道与高并发实战
  18. LeetCode 2296. 设计一个文本编辑器(双栈)
  19. java编写周易demo
  20. Problem F: 凹凸四边形

热门文章

  1. 我爬了某宝上4000+网店只为了告诉你中国人最爱喝什么绿茶
  2. 阶乘约数【蓝桥杯国赛】
  3. hive 按行打印出截止日期和开始日期之间的日期
  4. 光场相机1.0与光场相机2.0
  5. 【云原生之Docker实战】使用Docker部署Alist网盘直链程序
  6. 规范TS项目Any类型的使用
  7. 安防监控显示服务器内部错误,监控摄像常见故障和处理方法
  8. 斑马GK888T打印机跑纸(打印半张以及闪红灯)解决办法
  9. 2013年第四届丘成桐大学生数学竞赛获奖名单
  10. SuppressWarnings的使用、作用、用法