Winform作为server 使用SignalR

aquaman 2020/7/15 21:09:29

Winform作为server 1.添加nugetMicrosoft.AspNet.SignalR.SelfHost Microsoft.Owin.Cors其中:Microsoft.AspNet.SignalR.SelfHost 包里面包含SignalR类所以除了这两个不需要任何其他包Microsoft.Owin.Cors 解决跨域问题 2.创建Hubusing Microsoft.AspNet.SignalR;//Hub的…

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.注册中间件


image.png

代码

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.网页最终目录结构


image.png

5.运行网页


image.png

首先需要先运行winform 服务端
出现2次 服务端调用了addMessage方法是因为MyHub方法Send调用了两次

用winform作为客户端(未完待续)


.net4.x SignalR教程

随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[Winform作为server 使用SignalR]http://www.zyiz.net/tech/detail-143855.html

上一篇:.NET的未来:关于.NET5,每个.Net开发人员必须知道什么

下一篇:ASP.NET Core 中 HttpContext 详解与使用 | Microsoft.AspNetCore.Http 详解

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    关注微信小程序
    程序员编程王-随时随地学编程

    扫描二维码或查找【程序员编程王】

    可以随时随地学编程啦!

    技术文章导航 更多>
    扫一扫关注最新编程教程