WinForm中 Asp.Net Signalr消息推送测试实例
p{
text-align:center;
}
blockquote > p > span{
text-align:center;
font-size: 18px; color: #ff0000;
}
-->
WinForm中 Asp.Net Signalr消息推送测试实例
初学Signalr,只了解一些皮毛,还需进一步学习。SignalR提供了一个简单的API,用于创建从服务器端.NET代码调用客户端浏览器(和其他客户端平台)中的JavaScript函数的服务器到客户端的远程过程调用(RPC)。SignalR还包括用于连接管理(例如,连接和断开连接事件)和分组连接的API。

上面描述都是官方文档中提出的,我的测试项目的主要需求如下:
1、建立一个SignalR服务,用于实时广播信息,供客户端使用。
2、建立一个客户端,功能是只给服务端进行推送,但不接收服务端的广播信息。
3、WinFrom程序或者ASP.NET WBE端客户端程序,用于接收和展示接收的信息。
基本的流程图:
等待
有了明确的需求,打开VS直接开干。
1、先建立一个SignalR服务端
创建一个SignalR广播服务只需三步
第一步:新建项目(WF或者控制台),NuGet下载SignalR动态库。

第二步:创建一个HUB类,用于客户端访问连接
// [HubName("MyHub"), Authorize]
public class MyHub : Hub
{
public List<string> UserIdList1 { get; } = new List<string>();
/// <summary>
/// 信息广播
/// </summary>
/// <param name="identify">iot唯一标识</param>
/// <param name="model">数据模型</param>
[HubMethodName("Send")]
public void Send(string identify, IOTModel model)
{
Clients.All.addMessage(identify, model);
}
/// <summary>
/// 错误日志广播
/// </summary>
/// <param name="identify">唯一标示</param>
/// <param name="errMessage">错误信息</param>
[HubMethodName("ErrSend")]
public void Send(string identify, string errMessage)
{
Clients.All.addMessage(identify, errMessage);
}
/// <summary>
/// 向首次连接的客户端返回实时数据,用于展示
/// </summary>
/// <param name="identify"></param>
/// <param name="list"></param>
[HubMethodName("initSend")]
public void Send(string identify, List<IOTModel> list)
{
Clients.All.initData(identify, list);
}
public override Task OnConnected()
{
UserIdList1.Add(Context.ConnectionId);
//首次连接需要返回MongoDB中的最后一条记录供客户端展示
Send("IotList", ProdMongoDB.GetLastData());
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
UserIdList1.Remove(Context.ConnectionId);
return base.OnDisconnected(stopCalled);
}
public override Task OnReconnected()
{
UserIdList1.Add(Context.ConnectionId);
return base.OnReconnected();
}
}
第三步:异步开启服务Signalr服务
开启服务之前需要设置服务的IP和端口
private IDisposable SignalR { get; set; }
private string ServerURI = "http://" + ConfigurationManager.AppSettings["signalrAdress"];
private async void RunServer()
{
await Task.Run(() => StartServer());
}
private void StartServer()
{
try
{
SignalR = WebApp.Start(ServerURI);
}
catch (TargetInvocationException)
{
SignalR.Dispose();
Console.WriteLine("Server failed to start. A server is already running on " + ServerURI);
return;
}
}
2、建立一个客户端(WinForm 或者控制台程序),用于向服务端发送信息。
此客户端只负责给服务器发送信息,不接收服务器的广播信息,创建过程如下:
第一步:新建WF或控制台程序,添加动态库

第二步:创建连接对象,配置服务地址
//定义代理,广播服务连接相关
private static IHubProxy HubProxy { get; set; }
private static readonly string ServerUrl = ConfigurationManager.AppSettings["signalrServer"];
//private static string _serverUrl ="";
//定义一个连接对象
public static HubConnection Connection { get; set; }
第三步:异步连接服务端
//异步连接服务器
private async void ConnectAsync()
{
Connection = new HubConnection(ServerURI);
Connection.Closed += Connection_Closed; ;
HubProxy = Connection.CreateHubProxy("MyHub");
try
{
await Connection.Start();
}
catch (HttpRequestException)
{
_logger.Error("Unable to connect to server: Start server before connecting clients.");
return;
}
}
第四部:给服务端发送实时信息
HubProxy.Invoke("Send", "aaa", message);
发送信息中调用的Send是服务端HUB类中定义的发送方法,根据实际需求定义和使用方法。
3、建立一个WinForm客户端程序,用于接收服务端的广播信息
winform 客户端中定义连接服务端和上面2中的相同,不同之处是这个客户端只接收信息不发送信息。
跳过连接服务的部分
实时监听服务端的信息
Connection = new HubConnection(_serverUrl);
Connection.Closed += Connection_Closed;
HubProxy = Connection.CreateHubProxy("MyHub");
HubProxy.On<string, IOTModel>("AddMessage", RecvMsg);//接收实时信息
HubProxy.On<string, string>("addMessage", RecvMsg);//接收错误日志
HubProxy.On<string, List<IOTModel>>("initData", RecvMsg);//初始化监测数据
创建RecvMsg方法用于解析处理显示数据
private static void RecvMsg(string identifiy, string errMessage)
{
if (identifiy != "ErrorInfo") return;
ErrorList.Add("错误信息:"+ errMessage + ",接收时间:" + DateTime.Now);
//实时添加到richBox中
if (ErrorBox.InvokeRequired)
{
ErrorBox.Invoke((Action)(() => ErrorBox.AppendText("错误信息:" + errMessage + ",接收时间:" + DateTime.Now + "\r\n")));
return;
}
ErrorBox.AppendText("错误信息:" + errMessage + ",接收时间:" + DateTime.Now + "\r\n");
}
4、建立一个aps.net Web端客户端,和WinForm一样接收服务器广播信息。
建立web端客户端也比较简单,具体如下:
第一步:新建asp.net web应用程序,获取动态程序包


所需的js文件如上。
第二步:新建html 页面,编写脚本代码接收广播信息。
<script src="Scripts/jquery-3.0.0.js"></script>
<script src="Scripts/jquery.signalR-2.2.2.js"></script>
<script src="http://172.30.16.165:805/signalr/hubs"></script>
$(function() {
//配置hub服务器的地址
$.connection.hub.url = "http://localhost:888/signalr";
//声明一个hub的代理,此处的MyHub为服务器端配置的Hub名称
var proxy = $.connection.myHub;
//定义函数,接收服务广播,addMessage为服务端定义的客户端接收的方法
proxy.client.addMessage = function(name, message) {
//对接收到的数据进行解析
if (name === "FYIot") {
var html = "<tr><td>" + message.ConfigCode + "</td>";
html += "<td>" + message.ConfigValue + "</td>";
html += "<td>" + moment(message.SaveDate).format("YYYY-MM-DD HH:mm:ss") + "</td></tr>";
$("#sigBody").append(html);
}
}
//连接服务
$.connection.hub.start().done();
$("#tableDiv").slimScroll({
height: 500
});
});
<div style="text-align: center">
<h3>实时数据</h3>
</div>
<div style="width: 100%; padding: 20px;" id="tableDiv">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th width="50%">监测项编号</th>
<th width="20%">监测值</th>
<th width="30%">监测时间</th>
</tr>
</thead>
<tbody id="sigBody">
<tr>
</tr>
</tbody>
</table>
</div>
总结:通过以上步骤可以简单的搭建一个基于Signalr的客户端和服务端的通信实例,关于强大的signalr还需要不断的学习和探索。不足之处还望指点扔砖。
WinForm中 Asp.Net Signalr消息推送测试实例的更多相关文章
- Worktile中百万级实时消息推送服务的实现
Worktile中百万级实时消息推送服务的实现 出自:http://blog.jobbole.com/81125/
- Asp.net MVC企业级开发(04)---SignalR消息推送
Asp.net SignalR是微软为实现实时通信而开发的一个类库.可以适用于以下场景: 聊天室,如在线客服系统,IM系统等 股票价格实时更新 消息的推送服务 游戏中人物位置的实时推送 SignalR ...
- IOS开发—IOS 8 中设置applicationIconBadgeNumber和消息推送
摘要 在IOS7中设置applicationIconBadgeNumber不会有什么问题,但是直接在IOS8中设置applicationIconBadgeNumber会报错 因为在IOS8中要想设置a ...
- 拾人牙慧篇之——基于HTML5中websocket来实现消息推送功能
一.写在前面 要求做一个,后台发布信息,前台能即时得到通知的消息推送功能.网上搜了也有很多方式,ajax的定时询问,Comet方式,Server-Sent方式,以及websocket.表示除了定时询问 ...
- 【转】IOS开发—IOS 8 中设置applicationIconBadgeNumber和消息推送
在IOS7中设置applicationIconBadgeNumber不会有什么问题,但是直接在IOS8中设置applicationIconBadgeNumber会报错 因为在IOS8中要想设置appl ...
- Pusher 消息推送测试工具
1.Pusher 简介 Pusher 是一款为 iOS.Mac App 提供推送测试的小工具. 其它下载地址 Pusher v0.7.3 for Mac,密码:p19i. 2.使用方法 使用方法简介 ...
- Easy APNs Provider 消息推送测试工具
1.Easy APNs Provider 简介 Easy APNs Provider 是一款为 iOS.Mac App 提供推送测试的小工具. App Store 下载地址 Easy APNs Pro ...
- SignalR SelfHost实时消息,集成到web中,实现服务器消息推送
先前用过两次SignalR,但是中途有段时间没弄了,今天重新弄,发现已经忘得差不多了,做个笔记! 首先创建一个控制台项目Nuget添加引用联机搜索:Microsoft.AspNet.SignalR.S ...
- signalR 消息推送
业务情景一:上传报表,上传excel.如果excel的数据量很大,上万条,上十万条数据,那么这个上传请求必然是个耗时请求.用户上传之后,很关心上传的进度和结果. 业务情景二:站内消息提醒,实时有效地接 ...
随机推荐
- JavaScript异步加载的三种方式——async和defer、动态创建script
一.script标签的位置 传统的做法是:所有script元素都放在head元素中,必须等到全部js代码都被下载.解析.执行完毕后,才能开始呈现网页的内容(浏览器在遇到<body>标签时才 ...
- SpringCloud教程 | 第五篇: 路由网关(zuul)(Finchley版本)
在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...
- Elasticsearch学习笔记一
Elasticsearch Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎.它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索 ...
- XVII Open Cup named after E.V. Pankratiev. Eastern GP, Division 1
A. Count The Ones $ans=b-c+1$. #include <stdio.h> using namespace std ; int a , b , c ; void s ...
- mysql安装了半天参考了文章搞定了
https://blog.csdn.net/yelllowcong/article/details/79641313 mysql -uroot -pbrucelee 总结下: 1.安装时注意具体的路径 ...
- angular.injector()
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 听说尤雨溪在开发vue4.0?是谁煽动了前端圈的焦虑情绪
导火索因P图而起 今天前端圈里被一张P图搞得好热闹,最初只是QQ群里一个冒名尤雨溪的前端网友发了一句调侃的话,原话截图如下: 看完觉得好搞笑,说尤雨溪在开发vue4.0,有谁学不动了,就给他发10块钱 ...
- Python学习小纪
1.打包发布*.py文件---"文件路径下打开命令行 d:\python\python.exe setup.py sdist" eg:打包发布f:\C\python\print_l ...
- nanoPI编译内核的一些record
我用的nanopi型号为 nanopi NEO,本来想拿来跑一跑需要usb串口读数据的golang程序,NEO居然没有该内核驱动的配置. 官方wiki:http://wiki.friendlyarm. ...
- Python基础知识点小结
1.Python基础知识 在Python中的两种注释方法,分别是#注释和引号(''' ''')注释,#注释类似于C语言中的//注释,引号注释类似于C语言中的/* */注释.接着在Python中 ...