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的数据量很大,上万条,上十万条数据,那么这个上传请求必然是个耗时请求.用户上传之后,很关心上传的进度和结果. 业务情景二:站内消息提醒,实时有效地接 ...
随机推荐
- 【转】C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子. 标签: c#objectnewlineexceptionbytestring 2010-05-17 01:10 117109人阅读 ...
- 关于WQS二分算法以及其一个细节证明
应用分析 它的作用就是题目给了一个选物品的限制条件,要求刚好选$m$个,让你最大化(最小化)权值, 然后其特点就是当选的物品越多的时候权值越大(越小). 算法分析 我们先不考虑物品限制条件, 假定我们 ...
- CodeForces - 1013C C - Photo of The Sky 贪心
题目链接: https://vjudge.net/problem/1735276/origin 题目大意与思路: 题目的基本意思就是求一个矩形的最小面积. 这个可以用最大最小值, 将他们分为X和Y组. ...
- SpringCloud教程 | 第一篇: 服务的注册与发现
一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...
- Tornado-Form表单验证
基本思路 用户提交表单后,验证开始.页面中会有多个域要求验证,如text input,files, checkbox.同时,根据验证字段的不同,验证方式会有很多种,例如对邮箱.IP地址.电话的验证标准 ...
- Node.js_express_中间件 middleware_登录/注册实例源代码
静态资源: 都写死了的资源,如 css,html 解析规则: 所有路由和中间件都在一个数组中,js 引擎会按照代码先后顺序添加路由和中间件 当请求发送到服务器时,服务器获取当前的请求信息(请求方式.请 ...
- 重构file_get_contents实现一个带超时POST传值函数
function wp_file_post_contents($url, $post = null) { $context = array(); if (is_array($post)) { ksor ...
- (AB)Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round
A. Right-Left Cipher time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Linux 的 date 日期的使用
解决的问题有: 1:查看当前日期和时间 2:查看前几天的日期,或者后几天的日期. 3:查看上周几的日期,或者下周几的日期. 4:查看前后几小时,分钟.时间 编写一个简单的shell: 输出下个星期二的 ...
- 报文分析5、UDP协议的头结构
UDP协议的头结构 源端口(2字节) 目的端口(2字节) 封报长度(2字节) 校验和(2字节) 数据 (1)源端口(Source Port):16位的源端口域包含初始化通信的端口号.源端口和IP地址的 ...