Обращение к методу на сервере из кода клиента - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь использовать SignalR впервые, желая добавить его в свой проект.

Моя проблема сейчас заключается в том, что я не могу получить сообщение с сервера.Я получаю эту ошибку:

TypeError: signalRhub.Test is not a function

Мои ссылки на скрипты выглядят так (что, похоже, работает):

<script src="~/Scripts/jquery.signalR-2.3.0.js"></script>
<script src="~/Scripts/jquery.signalR-2.3.0.min.js"></script>
<script src='~/signalr/js'></script>

Вот мой код клиента:

<script>
    $(function () {
        var signalRhub = $.connection.hubSignalR;
        console.log(signalRhub);
        //Start connection
        $.connection.hub.start(function () {
            signalRhub.Test(function (response) {
                 alert("Response from server: " + response);
                //$("#testDiv").html(response);                
            });            
        });
    });
</script>

Вот мое определение класса сервера и метод, который я пытаюсь вызвать (который не может быть найден):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;

    namespace AuthSys.SignalRhub
    {
        public class HubSignalR : Hub
        {
            public string Test()
            {
                return "Success from server";
            }
        }
    }

------------------- Дополнительная информация --------------- enter image description here

Я приложил скриншот моей консоли Firefox.В моем коде клиента вы заметите этот код:

console.log(signalRhub);

Это то, что вы видите в консоли Firefox.Глядя на ребенка по имени connection, похоже, что соединение установлено.Здесь вы видите URL, который он генерирует и т. Д. И, глядя на дочерний элемент server (расширенные 2 уровня), похоже, что он нашел метод Test() на сервере.

Мой Startup.cs выглядит следующим образом (если это имеет какое-либо значение):

using Microsoft.Owin;
using Owin;

[assembly: OwinStartupAttribute(typeof(AuthSys.Startup))]
namespace AuthSys
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
            app.MapSignalR();
        }
    }
}

Кто-нибудь может знать, в чем заключается моя проблема?

Что я ожидаю (пытаюсьсделать), чтобы получить предупреждение на моем экране со строкой:

Success from server

, которая отображается в классе C # на сервере.

1 Ответ

0 голосов
/ 29 сентября 2018

Измените код C # для публикации вашего сообщения

public string Test() {
   //Clients.Client("ToClientId").TestMessages("Message");//send messages to specific user
   Clients.All.TestMessages("Message"); //send messages to all user
}

Способ отправки Javascript

signalRhub.server.test();//Note you didn't have created parameter, but you can create them

Javascript метод, подобный этому

signalRhub.client.TestMessages = function (response) {
    alert("Response from server: " + response);
};
...