前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >.NET Remoting 应用实例

.NET Remoting 应用实例

作者头像
DougWang
发布于 2020-02-18 08:24:25
发布于 2020-02-18 08:24:25
78600
代码可运行
举报
文章被收录于专栏:java跬步java跬步
运行总次数:0
代码可运行

前言

项目中运用到.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 进行配置信道和属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <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里就实现一个简单的方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public class MyServer : MarshalByRefObject,IMyInterface
    {
        public string sayHello(string name)
        {
            return "你好:" + name;
        }
    }

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

2.客户端

需要引用下面的命名空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Http;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Lifetime;
using System.Collections.Specialized;

服务端地址

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        const string OBJECT_URL = "MyServer.rem";
        const string REMOTING_URL = "http://127.0.0.1:8039/";

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

定义信道和实例化代理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            if (ChannelServices.GetChannel("DataProClient") == null)
            {
                ListDictionary channelProperties = new ListDictionary();
                channelProperties.Add("port", 0);
                channelProperties.Add("name", "DataProClient");
                channelProperties.Add("timeout", -1);
                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;

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

调用服务端的方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        public string say(string name)
        {
            string word = client_server.sayHello(name);
            return word;
        }

3.业务逻辑层

实例化客户端调用其方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        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的可以发私信给我。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014-01-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何通过Remoting实现双向通信
Remoting是NET平台下比较成熟高效的分布式技术,我们习惯采用传统的远程调用的方式使用Remoting。在客户端所在的Application Domain,我们通过Proxy(Transparent Proxy)远程地跨Application Domain调用一个方法。当来自Client端的调用请求通过Proxy到达Server端所在的Application Domain后,Remoting Infrastructure在Server 端激活(Activate)相应的远程对象(一个继承子System.
蒋金楠
2018/01/18
9870
如何通过Remoting实现双向通信
Remoting配置文件的用法
本文转载:http://www.cnblogs.com/rickie/archive/2004/10/10/50392.html
跟着阿笨一起玩NET
2018/09/18
6860
Castle 整合.NET Remoting
  今天研究了一下Castle的Remoting Facility.记录如下: 微软以前使用COM/DCOM的技术来处理分布式系统架构,通过Client端的Proxy代理程序来呼叫远程Server机器上的对象。.NET Framework则使用.NET Remoting或Web Services技术来实作分布式处理的工作概念;在这里针对.NET Remoting的设计架构做一个初步的简介和Castle整合示例。 .NET Framework提供了多种的机制来支持Remoting,如: .利用Channe
张善友
2018/01/19
5240
Castle 整合.NET Remoting
在使用 .NET Remoting 技术开发跨进程通信时可能遇到的各种异常
在使用 .NET Remoting 开发跨进程应用的时候,你可能会遇到一些异常。因为这些异常在后验的时候非常简单但在一开始有各种异常烦扰的时候却并不清晰,所以我将这些异常整理到此文中,方便小伙伴们通过搜索引擎查阅。
walterlv
2023/10/22
5780
c# Romting简单示例
MaybeHC
2024/04/23
1520
c# Romting简单示例
.NET Remoting 体系结构 之 信道的功能和配置 (一)
  信道用于.NET 客户端和服务器之间的通信。.NET Framework 4 发布的信道类使用 TCP 、HTTP 或IPC 进行通信。我们可以为其他的协议创建自定义信道。 HTTP 信道使用 HTTP 协议进行通信。因为防火墙通常让端口 80 处于打开的状态,所以客户端能 够访问 Web 服务器,因为.NET Remoting Web 服务可以侦听端口 80,所以客户端更容易使用它们。 虽然在 Internet 上也可以使用 TCP 信道,但是必须配置防火墙,这样客户端能够访问 TCP 信道 所使用的指定端口。与 HTTP 信道相比,在内部网环境中使用 TCP 信道能够进行更加高效的通信。 IPC 信道适合于在单个系统上进行跨进程的通信。因为它使用 Windows 进程间通信机制,所 以它比其他信道快。当执行远程对象上的方法调用时,导致客户信道对象就把消息发送到远程信道对象中。 服务器应用程序和客户端应用程序都必须创建信道。 下面的代码说明了如何在服务器端创建 TcpServerChannel:
DougWang
2020/02/17
9710
.Net Remoting(基本操作) - Part.2
接下来我们考虑通常的情况,也就是 客户程序 与 宿主程序 位于不同的进程中的情况。
张子阳
2018/09/30
5750
.Net Remoting(基本操作) - Part.2
.net remoting 使用事件
在RPC如果需要使用事件,相对是比较难的。本文告诉大家如何在 .net remoting 使用事件。
林德熙
2018/09/19
7310
.net remoting 使用事件
原 WCF学习之旅----基础篇之NET
公用类 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ServerObject {     public interface SayServer     {         string SayToServer(string word);     }     public class ServerObject:MarshalByRefObject,SaySe
魂祭心
2018/05/17
6220
我所理解的Remoting (2) :远程对象的生命周期管理[下篇]
在上一篇文章中([原创]我所理解的Remoting(2):远程对象生命周期的管理—Part I ),我简要的讲述了CLR的垃圾回收机制和Remoting 基于Lease的对象生命周期的管理。在这篇文章中,我们将以此为基础,继续我们的话题。在文章的开始,我将以我的理解详细地讲述Remoting中两个重要的概念——Lease和Sponsorship。然后我通过一个Sample,为大家演示如何以不同的方法延长远程对象的生命周期。 我们先不谈远程对象、本地对象。 不管是远程的对象,还是本地对象,都对于程序Appli
蒋金楠
2018/01/18
8220
我所理解的Remoting (2) :远程对象的生命周期管理[下篇]
.NET Remoting 体系结构 之 在 ASP.NET 中驻留远程服务器
     迄今为止,所有服务器示例都是运行在自驻留(self-hosted)的.NET 服务器上。自驻留的服务器必 须手动启动。.NET Remoting 服务器也可以在许多其他的应用程序类型中启动。在 Windows 服务中, 服务器可以在系统启动时自动启动,此外,进程可以通过系统账户的证书运行。
DougWang
2020/02/17
7880
.NET Remoting 之了解
  在企业级应用开发中,分布式开发占据了越来越重要的位置。.NET Remoting 是一种可扩展性很强的开发技术。
DougWang
2020/02/18
8410
我所理解的Remoting(1):Marshaling & Activation[下篇]
在上面一片文章,我花了大量的文字来来描述了Remote Object如何通过Marshaling的过程从Server端所在的Application Domain经过相关的转换(Transformation)传递到Client所在的Application Domain供Client调用; 以及Client的调用请求如何在Activate处于Server端Application Domain的Remote Object。大体的要点如下: Host在Server端注册Client可能会用到的一到多个Channel
蒋金楠
2018/01/16
5650
我所理解的Remoting(1):Marshaling & Activation[下篇]
WPF 封装 dotnet remoting 调用其他进程
在 WPF 使用RPC调用其他进程 已经告诉大家调用的原理,但是大家可以看到,如果自己写一个框架是比较难的。
林德熙
2022/08/04
8950
WPF 封装 dotnet remoting 调用其他进程
在 WPF 使用RPC调用其他进程 已经告诉大家调用的原理,但是大家可以看到,如果自己写一个框架是比较难的。
林德熙
2018/09/19
8450
.Net Remoting(远程方法回调) - Part.4
根据这三点的变化,我们可以看出:客户端含有客户端对象,但它还需要远程服务对象的元数据来构建代理;服务端含有服务对象,但它还需要客户端对象的元数据来构建代理。因此,客户端服务端均需要服务对象、客户对象的类型元数据,简单起见,我们将它们写在同一个程序集中,命名为ShareAssembly,供客户端、服务端引用。此时,运行时的状态图如下所示:
张子阳
2018/09/30
8110
.Net Remoting(远程方法回调) - Part.4
.NET Remoting 体系结构 之 信道的功能和配置 (二)
●  System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
DougWang
2020/02/18
7340
.NET简谈组件程序设计之(初识NetRemoting)
在本人的“.NET简谈组件程序设计之(初识远程调用) ”一文中,我们了解到什么是远程调用或者说在.NET平台上远程调用是什么样子的,可能和偏低层(Socket\Rpc)的远程调用有点距离。这只是系统为我们封装了假象而已,看不见不代表没有这逻辑,是为我们减轻了劳动负担。[王清培版权所有,转载请给出署名]
王清培
2022/03/14
3190
.NET简谈组件程序设计之(初识NetRemoting)
一个 PC上的 “ WormHole ” 漏洞
该文讲述了联想电脑在安全性方面的一个漏洞,可导致远程执行任意代码。攻击者通过在目标系统上执行恶意代码,可获取敏感信息或进行其他恶意行为。联想已针对此漏洞发布了修复方案,相关用户需及时升级操作系统以保护设备安全。
腾讯玄武实验室
2017/08/14
9870
.NET简谈组件程序设计之(详解NetRemoting结构)
在本人的上一篇文章中只是简单的介绍了一下.NETRemoting的一般概念和基本的使用。这篇文章我想通过自己的学习和理解将对.NETRemoting的整体的一个框架进行通俗的讲解,其中最重要的就是信道(管道)处理模型思想,这里面蕴含了很多的设计原理。[王清培版权所有,转载请给出署名] .NETRemoting远程处理架构是一个半成品,是.NET给我们的扩展框架,要想用于商业项目必须进行一些安全、性能方面的控制。要想进行一定深度的扩展那就要必须了解它的整体结构,各个点之间的关系才能很好的控制它。
王清培
2022/03/14
4140
.NET简谈组件程序设计之(详解NetRemoting结构)
相关推荐
如何通过Remoting实现双向通信
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文