SignalR Webform - signalr/hubs 协商问题

SignalR Webform - signalr/hubs Negociate issue

我有一个遗留的 webform 项目,需要在其中集成 signalr 技术 我知道 signalr/hubs 是动态生成的,但是在我的特定项目中我无法让它工作。

我试图加载所有 urls 路径,例如:

<script src="../signalr/hubs"></script>
<script src="~/signalr/hubs"></script>
<%--<script src='<%: ResolveClientUrl("~/signalr/hubs") %>'></script>--%>


为了解决这个问题,我在另一个工作正常的项目中生成了 signalR,我将其复制到我的脚本文件夹 /Scripts/SignalR/Hub.js 并在客户端引用了它。
<script src="../Scripts/SignalR/Hubs.js"></script>

它工作正常,因为我的客户端可以与我的 chatHub(服务器端)建立连接,初始化我的聊天变量,如下所示:


但是在那之后我在服务器到客户端之间的协商过程中出现错误,如下图所示:



我认为是因为当服务器尝试与客户端通信时,它生成 url 作为 [signalr/hub],但正如我之前提到的,我正在使用 /Scripts/SignalR/Hub.js 文件到实例断开与集线器的连接。

如何解决服务器与客户端之间的协商问题?

这是我的结构文件

startup.cs

using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;
using Microsoft.AspNet.SignalR;
using SistemaJaspion.AppCode;
using System.Web.Routing;

[assembly: OwinStartup(typeof(SistemaJaspion.AppCode.Startup))]

namespace SistemaJaspion.AppCode
{
    /// <summary>
    /// The server needs to know which URL to intercept and direct to SignalR. To do that we add an OWIN startup class.
    /// </summary>
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // Any connection or hub wire up and configuration should go here
            //app.MapSignalR("/signalr", new HubConfiguration());
            //app.MapSignalR();

            var hubConfiguration = new HubConfiguration();
            hubConfiguration.EnableDetailedErrors = true;
            hubConfiguration.EnableJavaScriptProxies = true;

            app.MapSignalR("/signalr", hubConfiguration);
        }

    }
}

ChatHub.cs

using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System.Web;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;

namespace SistemaJaspion.AppCode
{
    /// <summary>
    /// The Hub class is used to define methods the clients can call on the server
    /// </summary>
    /// 

    [HubName("chatHub")]

    //[Microsoft.AspNet.SignalR.Authorize]
    public class ChatHub : Hub
    {


        static List<UsuariosSignalR> ConnectedUsers = new List<UsuariosSignalR>();


        // Number of connected clients
        private static int connectionCount = 0;


        public void Send(string name, string message)
        {
            // Append the current date
            name = DateTime.Now.ToString() + " " + name;
            // Call the broadcastMessage method to update clients.
            Clients.All.broadcastMessage(name, message);
        }

        public override Task OnConnected()
        {

            // Increase the number of connections
            Interlocked.Increment(ref connectionCount);

            // Update the number of the connected users
            Clients.All.reportConnections(connectionCount);
            return base.OnConnected();
        }


        public override Task OnDisconnected(bool stopCalled)
        {
            // Decrease the number of connections
            Interlocked.Decrement(ref connectionCount);

            // Update the number of the connected users
            Clients.All.reportConnections(connectionCount);
            return base.OnDisconnected(stopCalled);
        }   
    }
}

MasterPage.aspx


    <script src="../Scripts/jquery-1.6.4.min.js"></script>
    <script src="../Scripts/jquery.signalR-2.4.1.js"></script>
    <script src="../Scripts/SignalR/Hubs.js"></script>


    <!--Add script to update the page and send messages.-->
    <script type="text/javascript">


         $(function () {
                    /* Peer-to-peer broadcast code */
                    // Declare a proxy to reference the ChatHub.

             debugger;

                   var chat = $.connection.chatHub;

                    chat.client.reportConnections = function (count) {
                        $("#usersCount").text(count);
                    }

                    $.connection.hub.logging = true;
                    $.connection.hub.start();
                });

    </script>

您可以在startup.cs

的配置函数中检查是否添加了端点
app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
                endpoints.MapRazorPages();

                endpoints.MapHub<ChartHub>("/charthub");
            });

这是我在项目中使用的。

我明白为什么它不起作用。

首先,我对 signalR 的研究(我研究的例子)是基于 WebApplication/webforms 项目,在我的例子中,我是基于 Wesite/webforms 项目,它的结构有点不同他们。

无论如何,归功于 Can SignalR be used with asp.net WebForms?,按照步骤我可以 运行 signalR on website/webform .net 项目。