WebForm SignalR 实时消息推送
原文:https://www.jianshu.com/p/ae25d0d77011
官方文档:https://docs.microsoft.com/zh-cn/aspnet/signalr/
实现效果
WebFrom + SignalR 实时消息,聊天室,即时消息
代码示例
动态链接库
添加基础动态链接库
Microsoft.AspNet.SignalR.Core.dll
Microsoft.AspNet.SignalR.Owin.dll
Microsoft.AspNet.SignalR.SystemWeb.dll
Microsoft.Owin.Host.SystemWeb.dll
Owin.dll
Newtonsoft.Json.dll
Global.asax
应用程序文件添加MapHubs
public class Global : System.Web.HttpApplication
{ protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapHubs();
}
}
继承 Hub
编写集成类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR; /// <summary>
/// PushHub 的摘要说明
/// </summary>
public class PushHub : Hub
{
public PushHub()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
}
聊天室页面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ChatRoom.aspx.cs" Inherits="WebApp.CustomApp.Message.ChatRoom" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<!-- 新 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css"> <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script> <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script> <script src="../../Plugins/jquery.signalR-1.1.4.js" type="text/javascript"></script>
<script src="/Signalr/Hubs"></script>
<script>
function SendMsg() {
var data = { name: $("#txtName").val(), msg: $("#txtMessage").val() };
$.post("ChatRoom.aspx", data, function (msg) { });
} var pushHub = $.connection.pushHub; pushHub.client.sendMessage = function (name, message, time) {
var flag = time + " " + name + " 说:" + message + "\r\n";
$("#txtChatLog").val($("#txtChatLog").val() + flag);
} $.connection.hub.logging = true;
$.connection.hub.start();
</script> </head>
<body> <form>
<div class="container">
<div class="row">
<br />
<div class="form-group">
<label for="txtName">用户名</label>
<input type="text" class="form-control" id="txtName" placeholder="用户名" />
</div>
<div class="form-group">
<label for="txtMessage">消息内容</label>
<input type="text" class="form-control" id="txtMessage" placeholder="消息内容" />
</div>
<button type="button" class="btn btn-default" onclick="SendMsg()">发送</button>
<br />
<div class="form-group">
<label for="txtMessage">聊天记录</label>
<textarea id="txtChatLog" class="form-control" cols="" rows=""></textarea>
</div> </div>
</div>
</form> </body>
</html>
聊天室后台
using Microsoft.AspNet.SignalR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace WebApp.CustomApp.Message
{
public partial class ChatRoom : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request.Form["name"] != null)
{
SendMsg(Request.Form["name"].ToString(), Request.Form["msg"].ToString());
}
}
} private void SendMsg(string name,string msg)
{
IHubContext chat = GlobalHost.ConnectionManager.GetHubContext<PushHub>();
chat.Clients.All.sendMessage(name, msg, DateTime.Now.ToString());
} }
}
注意事项
未生成 /Signalr/Hubs 脚本文件
如果通过浏览器查看时无法浏览 /Signalr/Hubs,可能是 Global.asax 未初始化 RouteTable.Routes.MapHubs();
Global.asax 中 RouteTable.Routes 找不到 MapHubs()
方式一
导入 System.Web.Routing
<%@ Import Namespace="System.Web.Routing" %>
方式二
或在 App_Code 文件夹下新建 Global.aspx.cs 文件,同时将原始 Global.aspx 修改如下
<%@ Application Codebehind="App_Code\Global.asax.cs" Inherits="Global" Language="C#" %>
WebForm SignalR 实时消息推送的更多相关文章
- .netcore signalR 实时消息推送
服务器端引入包 Install-Package Microsoft.AspNetCore.SignalR客户端引入包 npm install @aspnet/signalr <template ...
- 基于SignalR的消息推送与二维码描登录实现
1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...
- AngularJS+ASP.NET MVC+SignalR实现消息推送
原文:AngularJS+ASP.NET MVC+SignalR实现消息推送 背景 OA管理系统中,员工提交申请单,消息实时通知到相关人员及时进行审批,审批之后将结果推送给用户. 技术选择 最开始发现 ...
- Signalr实现消息推送
一.前言 大多数系统里面好像都有获取消息的功能,但这些消息来源都不是实时的,比如你开两个浏览器,用两个不同的账号登录,用一个账号给另外一个账号发送消息,然而并不会实时收到消息,必须要自己手动F5刷新一 ...
- 开源实时消息推送系统 MPush
系统介绍 mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点.同时也是少有的 ...
- 基于socket.io的实时消息推送
用户访问Web站点的过程是基于HTTP协议的,而HTTP协议的工作模式是:请求-响应,客户端发出访问请求,服务器端以资源数据响应请求. 也就是说,服务器端始终是被动的,即使服务器端的资源数据发生变化, ...
- Worktile中百万级实时消息推送服务的实现
Worktile中百万级实时消息推送服务的实现 出自:http://blog.jobbole.com/81125/
- 【js学习】js连接RabbitMQ达到实时消息推送
js连接RabbitMQ达到实时消息推送 最近在自己捯饬一个网站,有一个功能是需要后端处理完数据把数据发布到MQ中,前端再从MQ中接收数据.但是前端连接MQ又成了一个问题,在网上搜了下资料,点进去一篇 ...
- 未读消息(小红点),前端与 RabbitMQ实时消息推送实践,贼简单~
前几天粉丝群里有个小伙伴问过:web 页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢. 之前在 <springboot ...
随机推荐
- [LeetCode] 186. Reverse Words in a String II 翻转字符串中的单词 II
Given an input string, reverse the string word by word. A word is defined as a sequence of non-space ...
- SQL死锁情况汇总排查
select dbname,entity_name,count(1) as locks from (SELECT request_session_id AS spid, DB_NAME(resourc ...
- GridView树状结构显示
下面的树形结构代码需要GridVIew中的数据要求是按照上下级关系已经排列好的顺序,比如: GridView ID ParentID Name 1 0 父1 2 1 父1子1 3 1 父1子2 4 3 ...
- 02_四大组件之Activity
四大组件之Activity 1. 理论概述 1.1 Activity的理解 Servlet的理解回顾 狭义 Servlet是一个interface,我们的Servlet类都必须是此接口的实现类 广义 ...
- Java开发笔记(一百三十二)Swing的表格
前面介绍了程序界面上一些简单控件的组合排列,它们用来表达相互之间联系较弱的信息倒还凑合,要是用来表达关联性较强的聚合信息就力不从心了.倘若只是简单信息的罗列,例如商品名称列表.新闻标题列表.学生姓名列 ...
- poj 1095 题解(卡特兰数+递归
题目 题意:给出一个二叉树的编号,问形态. 编号依据 1:如果二叉树为空,则编号为0: 2:如果二叉树只有一个节点,则编号为1: 3:所有含有m个节点的二叉树的编号小于所有含有m+1个节点的二叉树的编 ...
- SSH协议介绍
SSH概念介绍 SSH是一种网络协议,我们常说的 ssh 一般指其实现,即 OpenSSH,在 shell 中,也就是 ssh 命令. Secure Shell(安全外壳协议,简称SSH)是一种加密的 ...
- golang ---获取磁盘信息
package main import ( "fmt" "github.com/StackExchange/wmi" ) type Storage struct ...
- 基于MBT的自动化测试工具——GraphWalker介绍和实际使用
GraphWalker是一个开源的基于模型的自动化测试工具,它可以用来通过图形测试模型来自动生成测试用例. 本文主要描述了使用yed画出FSM, EFSM模型图(常见的流程图),然后使用GraphWa ...
- RESTful 的学习总结
RESTful 的核心思想就是,客户端发出的数据操作指令都是"动词 + 宾语"的结构.比如,GET /articles这个命令,GET是动词,/articles是宾语.动词通常就是 ...