首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SignalR Webform -signalr/集线器Negociate问题

SignalR Webform -signalr/集线器Negociate问题
EN

Stack Overflow用户
提问于 2020-02-19 14:39:59
回答 1查看 219关注 0票数 0

我有一个遗留的webform项目,在这个项目中,集成signalr技术是必要的--我知道signalr/集线器是一刀切地生成的,但是在我的特定项目中,我可以让它工作。

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

<script src="../signalr/hubs"></script>

<script src="~/signalr/hubs"></script>

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

为了扭转这种局面,我在另一个工作良好的项目中生成了signalR,并将其复制到脚本文件夹/Script/SignalR/Hub.js中,并在客户端引用了它。

<script src="../Scripts/SignalR/Hubs.js"></script>

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

但是,在此之后,我得到了服务器到客户端之间的negociate进程中的错误,如下所示:

我认为这是因为当服务器尝试与客户机通信时,它会以signalr/hub的形式生成url,但正如我前面提到的,我正在使用/Script/SignalR/Hub.js文件来实例到集线器的连接。

如何解决服务器到客户端之间的这个嵌套问题?

这是我的结构文件

startup.cs

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
    <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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-25 00:40:12

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

首先,我对signalR(我所研究的例子)的研究是基于WebApplication/webforms项目的,在我的例子中,我是基于Wesite/webform项目的,这是它们之间的一些不同的结构。

无论如何,这归功于Can SignalR be used with asp.net WebForms?,在这里,我可以按照以下步骤在网站/webform .net项目上运行signalR。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60302806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档