Winform作为server
1.增加nuget
- Microsoft.AspNet.SignalR.SelfHost
- Microsoft.Owin.Cors
其中:
Microsoft.AspNet.SignalR.SelfHost 包外面蕴含SignalR类所以除了这两个不须要任何其余包
Microsoft.Owin.Cors 解决跨域
问题
2.创立Hub
using Microsoft.AspNet.SignalR;//Hub的别名,不便前台调用//[HubName("abc")]public class MyHub : Hub{ /// <summary> /// 编写发送信息的办法 /// </summary> /// <param name="name"></param> /// <param name="message"></param> // [HubMethodName("send")] public void Send(string name, string message) { //调用所有客户注册的本地的JS办法(addMessage) Clients.All.addMessage(name, message); //调用以后客户注册的本地的JS办法(addMessage) Clients.Caller.addMessage(name, message); }}
3.注册中间件
代码
using Microsoft.Owin;using Microsoft.Owin.Cors;using Owin;[assembly: OwinStartup(typeof(SignalRServer.Startup))]namespace SignalRServer{ public class Startup { public void Configuration(IAppBuilder app) { //跨域 app.UseCors(CorsOptions.AllowAll); ////配置生成代理 app.MapSignalR(); // app.MapSignalR("/client", new HubConfiguration()); //app.Map("/messageHub", map => //{ // map.RunSignalR(new Microsoft.AspNet.SignalR.HubConfiguration { EnableJavaScriptProxies = true }); //}); //app.Map("/messageConnection", map => //{ // map.RunSignalR<MessageConnection>(); //}); } }}
4.开启服务
string ServerUri="http://localhost:8000/"; IDisposable SignalR = WebApp.Start(ServerUri);
能够应用线程来开启
用Html作为客户端
1.增加nuget
- Microsoft.AspNet.SignalR.JS
Microsoft.AspNet.SignalR.JS 外面蕴含网页须要援用的signalr脚本
2.创立html页面
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head> <meta charset="utf-8" /> <title></title></head><body> <div id="context"> </div></body></html><script src="Scripts/jquery-1.6.4.min.js"></script><script src="Scripts/jquery.signalR-2.4.1.min.js"></script><script src="http://localhost:8000/signalr/js"></script><script src="Scripts/SignalR.js"></script>
留神
- localhost:8000/signalr/js 要和服务端的绝对应
- js援用的程序不能错
3.SignalR.js外面的代码
( function () { let hubUrl = 'http://localhost:8000/signalr'; let myhub = $.connection.messageHub; let log = $.connection.hub.log; $.connection.hub.url = hubUrl; $.connection.hub.start() .done(function () { $.connection.hub.logging = true; $.connection.hub.log(1); myhub.server.send("abc", "def").done(function () { showToHtml("client调用了send办法"); log("it works!!!"); }).fail(function () { log("Noooo!!!"); }); }) .fail(function () { }) myhub.client.addMessage = function myfunction(a, b) { showToHtml("服务端调用了addMessage办法"); log("into func"); } let showToHtml = function (msg) { $("#context").append(msg + "<br/>"); } })()
这里要留神:winform外面类/办法采纳的是C#命名规定,当在js外面时,会主动生成js的命名规定
4.网页最终目录构造
5.运行网页
首先须要先运行winform 服务端
呈现2次服务端调用了addMessage办法
是因为MyHub办法Send调用了两次
用winform作为客户端(未完待续)
.net4.x SignalR教程