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. openCV入门系列教学(一) 图像的读取、展示与保存

    序言 笔者最近做了两个CV领域的项目,因为数据量不足所以主要使用的是传统的CV方法.这时候不得不夸一句opencv库,让复杂的算法原理变得如此简单(调包调参侠表示很骄傲).所以闲暇下来对opencv的 ...

  2. 使用Xshell连接虚机安装的vyOS

    本文主要讲解:使用虚机(Vitual Box)安装的vyOS,如何使用Xshell来通过ssh方式连接. 首先咱们安装vyOS 1.安装vyOS 先用Vitual Box安装vyOS镜像. 接下来的操 ...

  3. ES6扩展——正则扩展(u、y修饰符)

    //下面三行代码效果一样 //全局匹配开头为a的 const regexp1 = /^a/g; const regexp2 = new RegExp('a','g'); const regexp3 = ...

  4. HCNP Routing&Switching之OSPF外部路由类型以及forwarding address

    前文我们了解了OSPF的4类.5类LSA,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15222969.html:今天我们来聊一聊外部路由类型和forward ...

  5. 快速搭建SSM基本项目

    快速搭建SSM项目基本手脚架 Maven构建项目 一般我们使用Maven来管理我们的项目: 导入相关依赖配置pom.xml: <?xml version="1.0" enco ...

  6. Linux 内核:匠心独运之无锁环形队列kfifo

    Linux 内核:匠心独运之无锁环形队列 Kernel version Linux 2.6.12   Author Toney   Email vip_13031075266@163.com   Da ...

  7. c# List集合类常用操作:二、增加

    所有操作基于以下类 class Employees { public int Id { get; set; } public string Name { get; set; } public stri ...

  8. .net Core 基于EF Core 实现数据库上下文

    在做项目时,需要将某一些功能的实体建立在另一个数据库中,连接不同的数据库用以存储记录.通过查找资料,实现EF Core上下文. 下面是实现上下文后的解决方案的目录: 1.UpAndDownDbCont ...

  9. C语言学习笔记---1.C语言概述

    1.典型C程序结构 2.C程序细节 2.1#include指令和头文件 #include这行代码是一条C预处理器指令(preprocessor directive).通常,C编译器在编译前会对源代码做 ...

  10. 38KHz,NEC红外模拟发送和接收程序

    /*************************************************************************************************/ ...