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. PHP5 GD库生成图形验证码(汉字)

    PHP5 GD库生成图形验证码且带有汉字的实例分享. 1,利用GD库函数生成图片,并在图片上写指定字符imagecreatetruecolor 新建一个真彩色图像imagecolorallocate ...

  2. javascript实现URL不缓存的方法

    <script> document.write("<s"+"cript type='text/javascript' src='/js/test.js? ...

  3. SpotLight的下载地址以及注册码可供参考

    ToadDBASuiteforOracle_101R2.exe 试用版http://worlddownloads.quest.com.edgesuite.net/Repository/www.ques ...

  4. String Subtraction

    Given two strings S1 and S2, S = S1 - S2 is defined to be the remaining string after taking all the ...

  5. Mysql 配置主从服务自动同步功能

    1.修改主服务器master:   #vi /etc/my.cnf       [mysqld]       log-bin=mysql-bin   //[必须]启用二进制日志       serve ...

  6. TCO 2014 Round 1C 概率DP

    TCO round 1C的 250 和500 的题目都太脑残了,不说了. TCO round 1C 950 一个棋子,每次等概率的向左向右移动,然后走n步之后,期望cover的区域大小?求cover, ...

  7. linq and rest api in sharepoint

    //1.make sure your application using the .net fromwork 3.5 //2.create entity classes using the instr ...

  8. Linux学习笔记(6)-工作管理

    什么是工作管理 工作来自job命令的翻译,job命令可以查看后台工作的进程.举例来说什么是工作管理,当你要打包一个比较大的目录时,很耗时间,但是你同时又需要使用别的命令.你会想我可以到开几个终端进行登 ...

  9. Automotive Security的一些资料和心得(1):Security Engineering

    陆续更新一些最近在Automotive Security方面的资料和心得. 1. Overview 1.1. Software Engineering Process PLC-Phases: Intr ...

  10. Android架构图