SignalR Webform - сигнализатор / хабы Negociate проблема - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть устаревший проект веб-формы, в который необходимо интегрировать технологию обработки сигналов. Я понял, что сигнализаторы / концентраторы генерируются динамически, однако в моем конкретном проекте c я не смог заставить его работать.

Я пытался загрузить все URL-пути, такие как:

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

Это работало нормально, потому что мой клиент мог установить sh соединение с моим chatHub (серверным), инициализируя мою переменную чата, как показано ниже:

enter image description here


Однако после этого я получил ошибку в процессе передачи данных между сервером и клиентом, как показано ниже:

enter image description here



Я думаю, это потому, что когда сервер пытается установить связь с клиентом, он генерирует 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>

Ответы [ 2 ]

0 голосов
/ 25 марта 2020

Я понял, почему это не сработало.

Прежде всего, мое исследование о signalR (примеры, которые я изучал) было основано на проекте WebApplication / webforms, а в моем случае я был основан на Wesite / webforms Проект, который немного отличается от них.

В любом случае, кредит переходит на Можно ли использовать SignalR с asp. net Веб-формами? , где, следуя инструкциям, я мог запустить signalR на сайте / веб-форме. net проект.

0 голосов
/ 19 февраля 2020

Вы можете проверить, добавлена ​​ли конечная точка в функцию конфигурации в файле startup.cs

app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
                endpoints.MapRazorPages();

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

Это то, что я использовал в своем проекте.

...