前言

项目中运用到.NET Remoting ,前段时间也看了下.NET Remoting的相关资料,感觉自己应该动手写个实例来梳理下对.NET Remoting认识和理解,不足的地方请大家指正。

简单介绍,使用Visual Studio 2010 ,在.NET Framework 4.0框架下,开发的ASP.NET web 应用程序。使用IIS 7.5。

基本构思

结合自己再项目中的运用,构建如下解决方案。

  • Buseniess:业务逻辑层
  • MyInterface:接口,类似WCF中的契约
  • NetRemotingWeb:表现层
  • RemotingClient:客户端
  • RemotingServer:服务端

基本原理:

实现过程

1.服务端

在web.config 进行配置信道和属性

  <system.runtime.remoting>
<application>
<service>
<wellknown mode="Singleton" type="RemotingServer.MyServer, RemotingServer" objectUri="MyServer.rem" />
</service>
<channels>
<channel ref="http">
<serverProviders>
<formatter ref="binary" typeFilterLevel="Full" />
</serverProviders>
<clientProviders>
<formatter ref="binary" />
</clientProviders>
</channel>
</channels>
</application>
<customErrors mode="off" />
</system.runtime.remoting>

objectUri指向MyServer

小白在MyServer里就实现一个简单的方法

    public class MyServer : MarshalByRefObject,IMyInterface
{
public string sayHello(string name)
{
return "你好:" + name;
}
}

要实现远程调用,必须继承MarshalByRefObject,同时要暴露一个接口在IMyInterface中。

2.客户端

需要引用下面的命名空间

using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Lifetime;
using System.Collections.Specialized;

服务端地址

        const string OBJECT_URL = "MyServer.rem";
const string REMOTING_URL = "http://127.0.0.1:8039/";

这里其实可以在config文件中配置,这里小白就直接写在程序里了。

定义信道和实例化代理

            if (ChannelServices.GetChannel("DataProClient") == null)
{
ListDictionary channelProperties = new ListDictionary();
channelProperties.Add("port", );
channelProperties.Add("name", "DataProClient");
channelProperties.Add("timeout", -);
channelProperties.Add("proxyName", ""); BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
provider.TypeFilterLevel = System.Runtime.Serialization.Formatters.TypeFilterLevel.Full;
HttpChannel channel = new HttpChannel(channelProperties,
new BinaryClientFormatterSinkProvider(),
provider
); ChannelServices.RegisterChannel(channel, false);
}
client_server = (MyInterface.IMyInterface)RemotingServices.Connect(typeof(MyInterface.IMyInterface), strUri);

strUri=REMOTING_URL+OBJECT_URL;

这里,检查下信道是否为空很有必要,不判断可能造成“该通道已被占用”导致信道创建不成功。

调用服务端的方法

        public string say(string name)
{
string word = client_server.sayHello(name);
return word;
}

3.业务逻辑层

实例化客户端调用其方法

        public string sayHello(string name)
{
Client client = new Client();
string s = client.say(name);
return s;
}

4.web 应用程序中调用业务逻辑层的方法

服务端寄宿到IIS中

1. 服务端发布

2.IIs中新建站点

在w3wp进程中就可以找到remoting寄宿的进程。

运行

好了,测试通过。

欢迎拍砖。需要demo的可以发私信给我。

.NET Remoting 应用实例的更多相关文章

  1. Remoting通讯实例

    Remoting通讯可以实现不同应用程序域之间的通信(可以为一台机器不同程序,也可以不同机器上的不同程序) 实例步骤: (1)编写透明代理类 新建一个类库,命名空间:MyRemoting 在该类库中建 ...

  2. .NET Remoting 入门实例

    1.创建服务端Class:ProxyServerRemoting using System; using System.Collections.Generic; using System.Text; ...

  3. 跟我一起学WCF(8)——WCF中Session、实例管理详解

    一.引言 由前面几篇博文我们知道,WCF是微软基于SOA建立的一套在分布式环境中各个相对独立的应用进行交流(Communication)的框架,它实现了最新的基于WS-*规范.按照SOA的原则,相对独 ...

  4. 回顾.NET Remoting分布式开发

    记得在下第一次接触.NET Remoting分布式开发是在2003年,那时候是Framework1.0初次亮相之时,Remoting分布式开发是Framework1.0其中一个亮点.经过多年的发展,在 ...

  5. 最近学习工作流 推荐一个activiti 的教程文档

    全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...

  6. .NET Remoting原理及应用实例:

    Remoting:(本文摘自百度百科) 简介:        什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方 式.从微软的产品角度来看,可以说Remoting就是DCOM的一种升 ...

  7. remoting与socket、web service的比较及实例

    remoting基础 一种分布式处理方式,可以说是DCOM的一种升级 跨过应用程序域,与另外的应用程序域进行通信,即穿越边界 在remoting中是通过通道(channel)来实现两个应用程序域之间对 ...

  8. .Net中Remoting通信机制简单实例

    .Net中Remoting通信机制 前言: 本程序例子实现一个简单的Remoting通信案例 本程序采用语言:c# 编译工具:vs2013工程文件 编译环境:.net 4.0 程序模块: Test测试 ...

  9. Remoting创建远程对象的一个实例:

    private static Lazy<IChannelManager>  channelManager=new Lazy<IChannelManager>(() =>  ...

随机推荐

  1. MongoDB【第二篇】MongoDB逻辑与物理存储结构

    基本的操作 一.常用的命令和基础知识 1.进入MongoDB sehll 首先我们进入到MongoDB所在目录执行 cd /work/app/mongodb/bin/ #启动 ./mongo 为了方便 ...

  2. 商业智能BI

    参考资料: 7 款顶级开源 BI(商务智能)软件和报表工具

  3. angularjs之Restangular用法

    参考资料: angularjs 获取服务端口数据的方法(三种) 学习-[前端]-angularjs基本框架以及向服务器发送请求的方法 Restangular on Angular

  4. 现代软件工程作业 第二章 学习github笔记

    在网上大量资料的辅助下,学习了github的基本使用方法,尝试了一些常见的命令.为了便于记忆总结了自己的学习内容. 1.首先需要在github的官网上注册一个帐号,并新建一个repository,选这 ...

  5. Azure底层架构的初步分析

    之所以要写这样的一篇博文的目的是对于大多数搞IT的人来说,一般都会对这个topic很感兴趣,因为底层架构直接关乎到一个公有云平台的performance,其实最主要的原因是我们的客户对此也非常感兴趣, ...

  6. vue2.0实战

    学了几周的vue2.0,终于有时间去做一个应用了. 为了全面联系相关知识,所以用到了vue-router,以及作者最新推荐的axios,组件库用的是饿了么的mint-ui2.0. 项目构建使用官方vu ...

  7. 内核编译报错Fedora20(友善)

    首先说明我的宿主机环境:Fedora20 64位,开发板是友善Smart210(S5PV210——Cotex-A8)!!!马上入题! 按照开发板的用户手册来编译内核,一直报这个错误:/opt/Frie ...

  8. Python中函数、类、模块和包的调用

    初学python阶段,大多数人对函数.类.模块和包的调用都搞得不是很清楚,这篇随笔就简单的进行说明. (1)函数 当函数定义好之后,可以直接调用. 比如:def summ(add1,add2),那么 ...

  9. java基础 布局管理器

    概念: 组建在容器(比如JFrame)中的位置和 大小 是由布局管理器来决定的.所有的容器都会使用一个布局管理器,通过它来自动进行组建的布局管理. 种类: java共提供了物种布局管理器:流式布局管理 ...

  10. jdk安装问题--javac不是外部命令

    set java_home=C:\Program Files\Java\jdk1.6.0_26   安装JDK的根目录 set classpath=%JAVA_HOME%\lib\tools.jar; ...