- 前言
- 一、SignaleR是什么?
- 二、使用步骤
- 1.建立服务器端
- 建立winform服务器端代码如下(示例):
- !!! 当你看到这可能疑惑为什么会有两个服务端,这呢使我写案例时偷懒了,就把两个弄一起了,你可以把这个看成两个项目一个是Winform(服务端)+Mvc(客户端)+SignalR,另一个Mvc(服务端+客户端)+SignalR
- 建立mvc服务器端代码如下(示例):
- 2.建立客户端
- 客户端代码如下(示例):
- 总结
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、SignaleR是什么?可以简单理解为一个服务器端与客户端的双向通道。实时由服务器端将内容推送到连接的客户端,而不是让服务器等待客户端请求新的数据。
二、使用步骤 1.建立服务器端 建立winform服务器端代码如下(示例):1.创建Winform窗体 ,命名SignalRService
2.添加新项-OWIN Startup类
3. 安装两个NuGet包
Microsoft.Owin.SelfHost
Microsoft.AspNet.SignalR.SelfHost
4.创建MoveTextHub类,需要继承于: Hub。在类上面添加[HubName(“getMessage”)]Hub的别名,方便前台调用
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
//Hub的别名,方便前台调用
//[HubName("getMessage")]
public class MyHub : Hub
{
///
/// 编写发送信息的方法
///
///
///
public void Send(string name, string message)
{
//调用所有客户注册的本地的JS方法(addMessage)
Clients.All.addMessage(name, message);
}
}
5.设置刚刚创建的Startup1
using Microsoft.Owin.Cors;
using Owin;
namespace SignalRService
{
public class Startup1
{
public void Configuration(IAppBuilder app)
{
// 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?linkID=316888
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
}
}
6.主窗体,两个按钮,一个启动,一个停止,还有一个文本框,用于显示输出信息。
using System;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Owin.Hosting;
namespace SignalRService
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public IDisposable SignalR { get; set; }
private const string ServerUri = "http://localhost:8888"; // SignalR服务地址
///
/// 启动服务
///
///
///
private void BtnStart_Click(object sender, EventArgs e)
{
BtnStart.Enabled = false;
WriteToConsole("正在启动服务...");
Task.Run(() => { BtnStart.Enabled = !StartServer(); }); // 异步启动SignalR服务
//Task.Run(() => StartServer()); // 异步启动SignalR服务
//Task.Run(() =>
//{
// BtnStart.Enabled = !StartServer();
//bool flag = StartServer();
//BtnStart.Invoke(new Action((f) => BtnStart.Enabled = !f), flag);
// }); // 异步启动SignalR服务
//BtnStart.Enabled = !StartServer();
}
///
/// 停止服务
///
///
///
private void BtnStop_Click(object sender, EventArgs e)
{
SignalR.Dispose();
Close();
}
///
/// 启动SignalR服务,将SignalR服务寄宿在WPF程序中
///
private bool StartServer()
{
try
{
SignalR = WebApp.Start(ServerUri); // 启动SignalR服务
}
catch (Exception ex)
{
WriteToConsole(ex.Message);
return false;
}
WriteToConsole("服务已经成功启动,地址为:" + ServerUri);
return true;
}
private delegate void WriteToConsoleDe(string msg);
///
/// 将消息添加到消息列表中
///
///
public void WriteToConsole(string message)
{
if (TxtConsole.InvokeRequired)
{
TxtConsole.Invoke(new Action((string msg) => TxtConsole.AppendText(message + Environment.newline)), message);
return;
}
TxtConsole.AppendText(message + Environment.newline);
}
}
}
!!! 当你看到这可能疑惑为什么会有两个服务端,这呢使我写案例时偷懒了,就把两个弄一起了,你可以把这个看成两个项目一个是Winform(服务端)+Mvc(客户端)+SignalR,另一个Mvc(服务端+客户端)+SignalR
建立mvc服务器端代码如下(示例):
1.创建Mvc
2.安装SignalRGet包
Microsoft.AspNet.SignalR
3.创建Hubs文件夹
并在其中新建项->SignalR->SignalR Hub Class (V2)命名MyHub
4.更新MyHub
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
namespace SignalRChatMVC5.Hubs
{
public class MyHub : Hub
{
public void Send(string name, string message)
{
// Call the addNewMessageToPage method to update clients.
Clients.All.addNewMessageToPage(name, message);
}
}
}
5.添加新项-OWIN Startup类
using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(SignalRChatMVC5.Startup))]
namespace SignalRChatMVC5
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
app.MapSignalR();
}
}
}
6.在 HomeController 中添加方法 MyChat并新添视图
@{
ViewBag.Title = "Chat";
}
Chat
@section scripts {
}
2.建立客户端
客户端代码如下(示例):
1.创建新的MVC
2.添加GIT包
Microsoft.AspNet.SignalR.Javascript.Client
3.添加HTML页面,命名为:SendMessage.html
代码如下:
SignalR Simple Chat
源码下载:[winfrom服务端mvc客户端](https://pan.baidu.com/s/1bpayjT1) 总结
这个是两项目的拼凑,可能会对阅读者产生误导,这属于我自己的理解,也转载了他人的内容,看了太多的具体都有谁的忘了,如果作者看到了,请及时联系我@我的邮箱:1850647211@qq.com//或者加我qq,记得备注哦!!!
反正记住一点它是一个双性通道,从服务端推送实时给客户端。
有不懂的可以参微软官网的SignalR指南



