前言

项目中运用到.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. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' heade

    XMLHttpRequest cannot load http://10.164.153.37:8050/WebService/WebService.asmx/wsGetStreetData. Res ...

  2. 行为驱动开发iOS <收藏>

    前段时间在design+code购买了一个学习iOS设计和编码在线课程,使用Sketch设计App,然后使用Swift语言实现Designer News客户端.作者Meng To已经开源到Github ...

  3. zend studio面板功能

    不小心把zend界面右边的显示类中各个方法的窗口关掉了,如何打开呢: 法一:点击Windows菜单,选择show view项,选择outline即可: 法二:点击Windows菜单,选择Reset P ...

  4. 【11-10】spring学习笔记-ApplicationContextAware

    package util; /** * @author aloha_world_ * @date 2016年11月10日 下午7:50:08 * @version v1.00 * @descripti ...

  5. 第一届山东省ACM——Balloons(java)

    Description Both Saya and Kudo like balloons. One day, they heard that in the central park, there wi ...

  6. Postgresql 简单配置 (ubuntu server 14.04.3)

    安装和配置 ubuntu server 已经自动安装了progresql,故安装步骤就省略 初始postgresql没有密码,不能使用,需要先设置密码,命令(从网上随意找的)如下: sudo su p ...

  7. Java 中正确获取中文字符串长度

    /** * 获取字符串的长度,如果有中文,则每个中文字符计为2位 * * @param value * 指定的字符串 * * @return 字符串的长度 */ public static int l ...

  8. hashMap 深入理解

    1.java 的hashMap 是通过 链地址 法来解决 hash冲突的 2.初始时是一个empty table, 第一次添加数据时检查到时空数组就会 生成指定容量的数组,也就是 在第一次使用时才初始 ...

  9. Android之Linearlayouy线性布局

    写了个小例子xml代码如下: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout x ...

  10. Android控制ScrollView滚动

    有两种办法,第一种,使用scrollTo(),这个方法不需要handler,直接调用就行 第二种方式,使用fullScrol() 下面我们看一下这个函数: scrollView.fullScroll( ...