您的位置:首页 > 其它

“一切都是消息”--MSF(消息服务框架)入门简介

2017-09-28 16:16 746 查看
“一切都是消息”--这是MSF(消息服务框架)的设计哲学。

MSF的名字是 Message Service Framework 的简称,中文名称:消息服务框架,它是PDF.NET框架的一部分。

1,MSF诞生的背景

MSF最初来源于2009年,我们为某银行开发的基金投资分析系统,由于银行安全的原因并且这些投资资料属于机密资料,规定必须使用邮件系统来发送这些资料,但是邮件的收发不是直接针对人,而是两端的计算机程序。为了及时向客户发送这些投资资讯,我们使用WCF开发了基于邮件的通信系统。后来,从这套系统中分离出来跟业务无关的“消息推送框架”,这就是MSF的雏形。

2011年,我来到某在线拍卖的电商创业公司,公司要求在1个月内开发出一套拍卖客户端软件。大家都知道创业公司的工作节奏,这么短时间要开发出一套类似炒股软件的在线拍卖软件是很难的,幸好有之前的“消息推送框架”,买家通过竞拍软件,实时更新竞拍价格,众多买家和卖家在线完成拍卖,整点抢拍,“消息推送框架”作为竞拍软件的基础服务通信框架,保证了整个软件的研发成功。不幸的是当时很多客户用的还是XP系统,还是深度克隆版,装不上.NET框架,半年后客户端产品放弃了,公司整体上转向BS应用结构和移动APP软件,“消息推送框架”在公司也随着客户端产品的遗弃而不再有人提起。

2015年,“消息推送框架”纳入PDF.NET框架集合,正式命名为MSF,对外开源。MSF跟SOD框架一起,成为PDF.NET的企业框架集合的成员,其位置如下图所示(WCF Message Service Framework):

class Program
{
static void Main(string[] args)
{
Console.WriteLine("******** PDF.NET MSF 客户端测试程序 *********");
Console.WriteLine();
Proxy client = new Proxy();
client.ErrorMessage += client_ErrorMessage;
Console.Write("请输入服务器的主机名或者IP地址(默认 127.0.0.1):");
string host = Console.ReadLine();
if (string.IsNullOrEmpty(host))
host = "127.0.0.1";
Console.WriteLine("服务地址:{0}",host);

Console.Write("请输入服务的端口号(默认 8888):");
string port = Console.ReadLine();
if (string.IsNullOrEmpty(port))
port = "8888";
Console.WriteLine("服务端口号:{0}", port);

client.ServiceBaseUri = string.Format("net.tcp://{0}:{1}", host, port);
Console.WriteLine("当前客户端代理的服务基础地址是:{0}",client.ServiceBaseUri);
Console.WriteLine();

string repMsg = "你好!";

client.SubscribeTextMessage("我是客户端", serverMessage => {
Console.WriteLine();
Console.WriteLine("[来自服务器的消息]::{0}", serverMessage);
});

while (repMsg != "")
{
Console.Write("回复服务器(输入为空,则退出):>>");
repMsg = Console.ReadLine();
client.SendTextMessage(repMsg);
}

Console.WriteLine("测试完成,退出");

}

static void client_ErrorMessage(object sender, MessageSubscriber.MessageEventArgs e)
{
Console.WriteLine("---处理服务时错误:{0}",e.MessageText);
}
}


View Code
6,生成MSFTest项目
如果已经生成过,请右键菜单,重新生成项目,这一步将自动启动MSF Host。

7,运行TestClient项目
在服务端和客户端随意输入文字内容,服务端可以将消息推送给所有订阅此消息的客户端。



如何启动MSF Host

在VS解决方案资源管理器上,选择安装过 nuget 程序包 PDF.Net.MSF.Service.Host 的项目,右键菜单,“重新生成”命令,即可启动MSF Host,它是在Nuget安装程序包的时候,给项目的编译前后添加了事件实现的:

copy /y "$(TargetDir)*.*" "$(SolutionDir)Host"
cd "$(SolutionDir)Host"
start "MessageService Host"  "SucessCompiled.vbs"


为MSF Host添加防火墙规则

如果你需要让MSF Host远程访问,可能需要管理防火墙规则,用管理员权限打开 CMD命令,运行下面的命令行:

netsh advfirewall firewall add rule name="PDF.NET.MSF.Host" dir=in action=allow protocol=TCP localport=8888


也可是指定程序路径方式来添加防火墙规则:

netsh advfirewall firewall add rule name="PDF.NET.MSF.Host" dir=in action=allow program="D:\MSFHost\PdfNetEF.MessageServiceHost.exe"


订阅和发送文本消息

MSF客户端程序,可以直接订阅MSF服务宿主的文本消息服务,之后,就可以随时向MSF服务宿主发送文本消息,并且能够异步的从MSF服务宿主接受消息。

相关的代码如下:

Proxy client = new Proxy();
client.ServiceBaseUri = string.Format("net.tcp://{0}:{1}", host, port);
client.SubscribeTextMessage("我是客户端", serverMessage => {
Console.WriteLine();
Console.WriteLine("[来自服务器的消息]::{0}", serverMessage);
});

while (repMsg != "")
{
Console.Write("回复服务器(输入为空,则退出):>>");
repMsg = Console.ReadLine();
client.SendTextMessage(repMsg);
}


服务代理对象的SubscribeTextMessage 方法发起文本定义,并且接受一个异步消息的委托。订阅之后,只要不关闭连接,之后随时可以使用 SendTextMessage 发送消息。

这样,一个简单的MSF消息通话示例就做好了,我们看到在服务器端一行代码都没有编写。

如果要自定义我们的业务服务,就需要写一点代码了,但也很简单,下一篇再继续,

或者你可以先看看网友写的介绍:

SOD开源框架MSF(消息服务框架)介绍

欢迎加入我们的QQ群讨论MSF框架的使用,群号:敏思(PWMIS) .NET 18215717,加群请注明:PDF.NET技术交流,否则可能被拒。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: