乐趣区

Winform作为server-使用SignalR

Winform 作为 server

1. 增加 nuget

  1. Microsoft.AspNet.SignalR.SelfHost
  2. 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


  1. 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>

留神

  1. localhost:8000/signalr/js 要和服务端的绝对应
  2. 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 教程

退出移动版