.NET Remoting 应用实例
前言
项目中运用到.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 应用实例的更多相关文章
- Remoting通讯实例
Remoting通讯可以实现不同应用程序域之间的通信(可以为一台机器不同程序,也可以不同机器上的不同程序) 实例步骤: (1)编写透明代理类 新建一个类库,命名空间:MyRemoting 在该类库中建 ...
- .NET Remoting 入门实例
1.创建服务端Class:ProxyServerRemoting using System; using System.Collections.Generic; using System.Text; ...
- 跟我一起学WCF(8)——WCF中Session、实例管理详解
一.引言 由前面几篇博文我们知道,WCF是微软基于SOA建立的一套在分布式环境中各个相对独立的应用进行交流(Communication)的框架,它实现了最新的基于WS-*规范.按照SOA的原则,相对独 ...
- 回顾.NET Remoting分布式开发
记得在下第一次接触.NET Remoting分布式开发是在2003年,那时候是Framework1.0初次亮相之时,Remoting分布式开发是Framework1.0其中一个亮点.经过多年的发展,在 ...
- 最近学习工作流 推荐一个activiti 的教程文档
全文地址:http://www.mossle.com/docs/activiti/ Activiti 5.15 用户手册 Table of Contents 1. 简介 协议 下载 源码 必要的软件 ...
- .NET Remoting原理及应用实例:
Remoting:(本文摘自百度百科) 简介: 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方 式.从微软的产品角度来看,可以说Remoting就是DCOM的一种升 ...
- remoting与socket、web service的比较及实例
remoting基础 一种分布式处理方式,可以说是DCOM的一种升级 跨过应用程序域,与另外的应用程序域进行通信,即穿越边界 在remoting中是通过通道(channel)来实现两个应用程序域之间对 ...
- .Net中Remoting通信机制简单实例
.Net中Remoting通信机制 前言: 本程序例子实现一个简单的Remoting通信案例 本程序采用语言:c# 编译工具:vs2013工程文件 编译环境:.net 4.0 程序模块: Test测试 ...
- Remoting创建远程对象的一个实例:
private static Lazy<IChannelManager> channelManager=new Lazy<IChannelManager>(() => ...
随机推荐
- window 使用vagrant搭建开发开发环境
# -*- mode: ruby -*-# vi: set ft=ruby : # All Vagrant configuration is done below. The "2" ...
- 再谈 Mysql解决中文乱码
一是要把数据库服务器的字符集设置为 utf8. 数据库的字符集会跟服务器的字符集一起变化, 也会变成 utf8: 在/etc/my.cnf中, 的 [mysqld]中, 设置 character-se ...
- JavaScript - 原型
一切皆为对象 殊不知,JavaScript的世界中的对象,追根溯源来自于一个 null 「一切皆为对象」,这句着实是一手好营销,易记,易上口,印象深刻. 万物初生时,一个null对象,凭空而生,接着O ...
- 库AFNetworking的使用
库AFNetworking的使用 1.GET请求(html,json,xml) #pragma mark -GET请求 -(void)testGetRequset{ NSString *urlStri ...
- 使用mysqlslap对mysql进行压测,观察Azure虚拟机cpu使用率
一直想做这个测试,原因很简单,很多人一直比较怀疑Azure的虚拟机性能,说相同的配置凭啥比阿里的虚拟机贵那么多,其实,我自己以前也怀疑过,但是接触Azure的几个月,确实发现Azure的虚拟机性能真的 ...
- .net一般处理程序(httphandler)实现文件下载功能
Handler文件代码如下: public class MDMExporterWeb : IHttpHandler { public void ProcessRequest(HttpContext c ...
- 面localStorage用作数据缓存的简易封装
面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...
- instanceof操作符
instanceof是Java.php的一个二元操作符(运算符),和==,>,<是同一类东西.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是判断其左边对象是否为其右边类的实 ...
- CentOS6.3 重启后/etc/resolv.conf 被还原解决办法(转)
今天一台服务器上不了网,设置了nameserver,重启后/etc/resolv.conf文件就被自动还原了,最后发现是被Network Manager修改了.解决方法:停止Network Manag ...
- MVC 文件上传问题
在用MVC作文件上传处理时,最开始是这样的. html代码 <div id="dialog" title="Upload files"> ...