remoting 在分布式应用中逐渐在企业级应用发展开来,最初提出分布式应用,主要目的是为了降低服务器的压力,将耗性能的处理放在另外一个程序中,然后将计算结果发送到另外一个应用中。而remoting就是提供了这个角色,本实例主要讲解服务器端订阅客户端,也就是客户端进行某操作,会及时告知服务器端。既然这样的话,事件订阅应该放在服务器端,行为放在客户端,通过行为触发服务器端事件。好了,大概的思路理清楚了,下面来主要讲解一下代码吧。

思路:客户端执行方法->服务器端事件被触发->公共实体类需要提供委托及执行方法才能让服务器端和客户端进行交互->如果让服务器端和客户端都能交互所以必须向上提炼出接口,接口包括委托和行为。

第一步:创建公共接口类库,命名为ICommon,代码如下:

namespace ICommon
{
public delegate void OnChangeHander(string msg); public interface IShare
{
void Say(string msg);
}
}

  第二步:创建实体类库,用于实现接口,命名为ServerBLL,代码如下:

namespace ServerBLL
{
public class CommonServerUse : MarshalByRefObject, IShare
{
public static event OnChangeHander OnChange; public void Say(string msg)
{
if (OnChange != null)
{
OnChange(msg);
}
}
}
}

  注意要添加MarshalByRefObject,主要目的是让通道技术数据传输

第三步:服务器端实现,创建服务器,开启事件监听,事件监听注意启用单例模式Sington,防止客户端调用的行为匹配不到服务器端的服务

代码如下:

namespace ConsoleServer
{
class Program
{
static void Main(string[] args)
{
HttpChannel chanel = new HttpChannel(8080);
ChannelServices.RegisterChannel(chanel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(CommonServerUse), "King", WellKnownObjectMode.Singleton);
CommonServerUse.OnChange += new OnChangeHander(CommonServerUse_OnChange);
Console.WriteLine("服务器已启动,等待客户端连接");
Console.ReadKey();
} static void CommonServerUse_OnChange(string msg)
{
Console.WriteLine("来自客户端消息:" + msg);
}
}
}

  好了,服务器端实体类(单例)创建好了,事件监听也绑定好饿,接下来就是客户端引用服务器端的单例实体类

第四部:引用服务器端的服务,生成实例:

代码如下:

namespace ConsoleClient
{
class Program
{
static void Main(string[] args)
{
HttpChannel channel = new HttpChannel(0);
ChannelServices.RegisterChannel(channel, false); IShare share = (IShare)Activator.GetObject(typeof(IShare),"http://localhost:8080/King");
Console.WriteLine("客户端已启动,输入exit退出客户端");
string console = Console.ReadLine(); while (console != "exit")
{
share.Say(console);
console = Console.ReadLine();
}
Console.ReadKey();
}
}
}

  好了,接下来看一下效果,先打开服务器端程序,然后打开多个客户端,效果如下:

源代码下载地址:ConsoleRemoting-服务器订阅客户端(服务器端收客户端消息)

net remoting 服务器端订阅客户端(附源代码)的更多相关文章

  1. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转

    效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])    本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较   ...

  2. 【转】P2P之UDP穿透NAT的原理与实现(附源代码)

    作者:shootingstars (有容乃大,无欲则刚)  日期:2004-5-25 出处:P2P中国(PPcn.net) P2P 之 UDP穿透NAT的原理与实现(附源代码)原创:shootings ...

  3. WCF技术剖析之二十八:自己动手获取元数据[附源代码下载]

    原文:WCF技术剖析之二十八:自己动手获取元数据[附源代码下载] 元数据的发布方式决定了元数据的获取行为,WCF服务元数据架构体系通过ServiceMetadataBehavior实现了基于WS-ME ...

  4. prisma 服务器端订阅试用

      graphql 协议是支持数据的实时订阅功能的(一般基于websocket 进行实现) prisma 支持客户端订阅以及服务器端订阅(类似webhook),可以方便将 数据推送后端服务 目的 pr ...

  5. TCP服务器端和客户端程序设计【转】

    本文转载自:http://blog.csdn.net/yueguanghaidao/article/details/7035248# 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.实验目的 ...

  6. redis发布订阅客户端报错

    转自简书[https://www.jianshu.com/p/a85ec38245da] 最近遇到一个问题,springBoot程序中有一个监听器,监听redis中发来的消息(其实是监听一个key的消 ...

  7. 【转】Android Https服务器端和客户端简单实例

    转载地址:http://blog.csdn.net/gf771115/article/details/7827233 AndroidHttps服务器端和客户端简单实例 工具介绍 Eclipse3.7 ...

  8. 【知识积累】服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)

    一.前言 由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户端采用Axis开发的WebServic ...

  9. 实现服务器端与客户端的高频实时通信 SignalR(2)

    说明:本篇文章与上篇文章 实现服务器端与客户端的实时通信 SignalR(1) 基本代码类似,只是做了些处理 高频 的改动. 一.本文出处:SignalR 实例介绍 (建议看原著里面有DEMO下载) ...

随机推荐

  1. Kakfa揭秘 Day1 Kafka原理内幕

    Spark Streaming揭秘 Day32 Kafka原理内幕 今天开始,会有几天的时间,和大家研究下Kafka.在大数据处理体系中,kafka的重要性不亚于SparkStreaming.可以认为 ...

  2. 初识shell脚本

    shell字符串.shell数组.shell echo指令.shell test命令.shell if语句.shell case语句.shell for语句.shell while语句.shell b ...

  3. [转]Unity3D游戏开发之数据持久化PlayerPrefs的使用

    转自 http://blog.csdn.net/qinyuanpei/article/details/24195977 首先我们来看两段Unity3D中实现数据读写的简单代码吧: //保存数据 Pla ...

  4. 深度:ARC会导致的内存泄露

    iOS提供了ARC功能,很大程度上简化了内存管理的代码. 但使用ARC并不代表了不会发生内存泄露,使用不当照样会发生内存泄露. 下面列举两种内存泄露的情况. 1,循环参照 A有个属性参照B,B有个属性 ...

  5. FlushMode属性与transaction(spring注入的事务)

    一.参见hibernate的api http://tool.oschina.net/apidocs/apidoc?api=hibernate-3.6.10 http://tool.oschina.ne ...

  6. firefly笔记一之http模块

    原地址:http://www.9miao.com/question-15-54380.html Firefly是免费开源的游戏服务器端框架,开发语言是python,基于twisted框架开发,作为一名 ...

  7. use sql trigger call java function

    Use UDF sys_exec to do this. You can use this link to use sys_exec function. It says, sys_exec sys_e ...

  8. Google Play市场考察报告

    考察了Google Play日本市场的10款应用,考察的重点在于每个App有什么亮点,盈利模式在哪里.本文并不是App的功能介绍. (1)恋爱文集[文库类应用] 该应用收录了一些恋爱文章,其主要受众是 ...

  9. 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)

    2453: 维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有 ...

  10. ASP.NET 全局变量和页面间传值方法

    http://www.cnblogs.com/dgjack/archive/2011/05/28/2060913.html 1. 使用QueryString变量 QueryString是一种非常简单的 ...