1、创建空白的控制台程序

2、添加两个NuGet包(Microsoft.AspNet.SignalR.SelfHost、Microsoft.Owin.Cors、Topshelf)Topshelf用于快捷创建windows服务

3、添加Myservice服务类

using Microsoft.AspNet.SignalR.Hosting;
using Microsoft.Owin.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace BCode_Framework_ConsoleSignalR
{
public class MyService
{
private IDisposable SignalR { get; set; }
private string SignalRUrl = string.Empty;
public MyService()
{
SignalRUrl = "http://127.0.0.1:1010";
Console.WriteLine("获取配置:" + SignalRUrl);
} public bool Start()
{
try
{
Console.WriteLine("事实消息服务运行在:" + SignalRUrl);
SignalR = WebApp.Start(SignalRUrl);
return true;
}
catch
{
return false;
} } public bool Stop()
{
if (SignalR != null)
{
SignalR.Dispose();
}
return true;
}
}
}

4、设置Program文件中Main类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Owin;
using Microsoft.Owin.Hosting;
using Topshelf;
namespace BCode_Framework_ConsoleSignalR
{
class Program
{
static void Main()
{
HostFactory.Run(x => {
//设置服务窗口
x.Service<MyService>(sc =>
{
sc.ConstructUsing(service => new MyService());
sc.WhenStarted(service => service.Start());
sc.WhenStopped(service => service.Stop());
});
x.SetServiceName("CheckService");//服务名称
x.SetDescription("Check");//服务描述
x.SetDisplayName("Check Service");//服务显示的名称
x.RunAsLocalSystem();//以本地系统账户启动服务
}); #region 为了方便调试
StartOptions options = new StartOptions();
//服务器Url设置
options.Urls.Add("http://127.0.0.1:1010");
//Server实现类库设置
options.ServerFactory = "Microsoft.Owin.Host.HttpListener";
//以当前的Options和Startup启动Server
using (WebApp.Start(options))
{
Console.WriteLine("Owin Host/Server started,press enter to exit it...");
//显示启动信息,通过ReadLine驻留当前进程
Console.ReadLine();
}//Server在Dispose中关闭
#endregion }
}
}

5、创建SignalR集线器类 重写了一个连接方法和创建一个客户端方法

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System;
using System.Threading.Tasks;
namespace BCode_Framework_ConsoleSignalR.Hubs
{
//定义客户端调用服务端方法的名称,如果没有定义注意客户端会自动把服务端方法的首字母改为小写
[HubName("serviceMonitorHub")]
public class ServiceMonitorHub:Hub
{
//当客户端与服务器建立连接后执行的方法
public override Task OnConnected()
{
//获取客户端ID
Console.WriteLine("{0}已连接", Context.ConnectionId);
//服务端往客户端发送数据ServerSendData方法为客户端定义的方法
Clients.Client(Context.ConnectionId).ServerSendData("服务端与客户端:" + Context.ConnectionId + "成功建立连接!");
return base.OnConnected();
}
//客户端执行服务器端的方法
[HubMethodName("ClickSendData")]
public void ClickSendData(string msg)
{
Console.WriteLine("接收到客户端" + Context.ConnectionId + "发送的数据:" + msg);
}
}
}

6、添加Startup启动类

using Microsoft.Owin.Cors;
using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace BCode_Framework_ConsoleSignalR
{
class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
}

7、客户端调用

web端引用NuGet包(Microsoft.AspNet.SignalR.JS)

<script src="~/Scripts/jquery-1.6.4.min.js"></script>
<script src="~/Scripts/jquery.signalR-2.4.1.min.js"></script>
<script src="http:127.0.0.1:1010/SignalR/Hubs"></script>
<div>
<input id="txt_value" type="text" />
<input id="btn_send" type="button" value="发送" />
<label id="lbl_msg"></label>
</div>
<script>
var KeyValue = "";
var app = null;
var Connectioned = false;
$(function () {
if (!Connectioned) {
$.connection.hub.url = "http:127.0.0.1:1010/SignalR/Hubs";
app = $.connection.serviceMonitorHub;
}
if (app != null) {
app.client.ServerSendData = function (msg) {
$("#lbl_msg").append("<br/>" + msg);
}
$.connection.hub.start()
.done(function () { $('#btn_send').click(function () {
connected = true;
console.log('Now connected, connection ID=' + $.connection.hub.id);
app.server.ClickSendData($("#txt_value").val());
}) })
.fail(function () {
console.log('Not fount connect');
})
} })
</script>

8、测试结果

学习使用SignalR的更多相关文章

  1. Asp.net core 学习笔记 SignalR

    refer : https://kimsereyblog.blogspot.com/2018/07/signalr-with-asp-net-core.html https://github.com/ ...

  2. 一步一步学习SignalR进行实时通信_9_托管在非Web应用程序

    原文:一步一步学习SignalR进行实时通信_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信\_9_托管在非Web应用程序 一步一步学习SignalR进行实时通信_9_托管在非We ...

  3. signalr中Group 分组群发消息的简单使用

    前一段时间写了几篇关于signalr的文章 1.MVC中使用signalR入门教程 2.mvc中signalr实现一对一的聊天 3.Xamarin android中使用signalr实现即时通讯 在平 ...

  4. 使用ASP.NET MVC Web SignalR 构建单身聊天室(一)

    前言:本系列的头章,想要带大家一起学习Web SignalR,那它是什么呢?ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.什么 ...

  5. WinForm中 Asp.Net Signalr消息推送测试实例

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  6. 客户端-服务器端互动比较与原生实例(比较ajax,server-sent event,websocket/netsocket)

    昨日学习了websocket的原生实例,觉得有必要把几种常见的客户端-服务器端无刷新交互形式列举比较: 一.Ajax:客户端决定何时主动向Server端发请求 如:无刷新评论.无刷新更换图片. 主要目 ...

  7. 一步一步学习SignalR进行实时通信_1_简单介绍

    一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...

  8. 一步一步学习SignalR进行实时通信_8_案例2

    原文:一步一步学习SignalR进行实时通信_8_案例2 一步一步学习SignalR进行实时通信\_8_案例2 SignalR 一步一步学习SignalR进行实时通信_8_案例2 前言 配置Hub 建 ...

  9. 一步一步学习SignalR进行实时通信_7_非代理

    原文:一步一步学习SignalR进行实时通信_7_非代理 一步一步学习SignalR进行实时通信\_7_非代理 SignalR 一步一步学习SignalR进行实时通信_7_非代理 前言 代理与非代理 ...

随机推荐

  1. 如何在 Go 中嵌入 Python

    如果你看一下 新的 Datadog Agent,你可能会注意到大部分代码库是用 Go 编写的,尽管我们用来收集指标的检查仍然是用 Python 编写的.这大概是因为 Datadog Agent 是一个 ...

  2. apt-get 安装程序时报 'E: Unable to locate package xxx' 错误处理办法

    提示无法定位包,要执行命令更新: sudo apt-get update

  3. Spring Boot +Vue 项目实战笔记(二):前后端结合测试(登录页面开发)

    前言:关于开发环境 每位 Coder 都有自己偏好的开发工具,从大的方面划分主要有文本编辑器流和 IDE 流两种,我有一段时间也喜欢用编辑器(Sublime Text.Vim),但对我来说开发效率确实 ...

  4. 一个基于activiti审批流程示例,如何与系统整合

    前言 目前市场上有很多开源平台没有整合工作流,即使有,也是价格不菲的商业版,来看这篇文章的估计也了解了行情,肯定不便宜.我这个快速开发平台在系统基础功能(用户管理,部门管理-)上整合了工作流,你可以直 ...

  5. Mybatis-plus<三> MybatisPlus条件构造器

    Mybatis-plus<三> MybatisPlus条件构造器 Demo GitHub下载地址:https://github.com/RJvon/Mybatis_plus_demo My ...

  6. 记一次《C语言踩内存》问题定位有感

    踩内存问题,个人认为算是比较容易出现但是有很难定位的问题,被踩者轻者功能瘫痪,重者一命呜呼,直接诱发死机.产生踩内存的的原因也比较多样,比较典型的有如下几种: 数组越界访问 字符串越界操作 直接操作野 ...

  7. VUE004. provide与inject的使用(祖先组件隔多层传静态值给子孙组件)

    provide和inject可以通过祖先组件隔三层四层甚至隔着九层妖塔传值给子孙组件. 需要注意的是这样的传值方式是非响应式的,需要结合自身的应用场景,比如将上传的限制条件通过父组件传值给子组件的子组 ...

  8. 菜狗、《灵笼》、《时光代理人》,重新审视Z世代的电商逻辑

    来源:懂懂笔记 B站还有多少潜力可以挖掘? 虽然B站的最新财报依然还是亏损,但同时也让人看到更多的可能性. 从财报数据的亮点来看,一是营收增长,B站二季度营收为44.95亿元,同比增长72%.营收上B ...

  9. Win8 iis 环境搭建

    http://www.cnblogs.com/Joans/archive/2012/07/16/2593828.html 系统:win8 环境:vs2012 一:安装IIS 比较win7的安装来说,多 ...

  10. 个人作业--体温上报APP

    第一阶段目标: 1.要求增加用户注册功能,用户注册信息包括用户ID(学号).用户名(姓名),手机号码,用户单位(班级),用户班级四项基本信息,用户第一次注册后,用户姓名不用每次输入 . 2.体温上报界 ...