Member 14652754 Ответов: 0

Клиент Signalr не получает сообщений от сервера


Я пытаюсь создать серверную клиентскую среду с помощью SignalR. Я прочитал много информации в интернете, а также много о переполнении стека, но я полностью застрял :(

Что я уже пробовал:

Вот что я сделал:

Я создал a ASP.NET веб-приложение .NET framework (опубликованный как порт веб-сайта ISS 50999, действующий как мой сервер). Я добавил Microsoft.сеть САШ.SignalR, Microsoft.сеть САШ.Помощью SignalR.Ядро, Майкрософт.сеть САШ.Помощью SignalR.JS и Microsoft.сеть САШ.SignalR.SystemWeb к моему решению с помощью консоли диспетчера пакетов.

Я создал класс OWIN запуска :

using Microsoft.Owin;
using Owin;

[assembly: OwinStartup(typeof(TestSignalR.Startup))]

namespace TestSignalR
{
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=316888
            app.MapSignalR();
        }
    }
}


Я создал хаб с обратным сообщением всем клиентам:

[HubName("mart")]
    public class MartHub : Hub
    {
        public Task SendMessage(string user, string message)
        {
            using (StreamWriter file = new StreamWriter(@"C:\temp\logServer.txt", true))
            {
                file.WriteLine("Test");
            }

            // Clients must have an eventhandler for ReceiveMessage
            return Clients.All.SendAsync("ReceiveMessage", user, message);
        }
    }


Для моего клиента я создал простое консольное приложение с обработчиком сообщений приема

static void Main(string[] args)
        {
            var connection = new HubConnection("http://127.0.0.1:50999/");
            var myHub = connection.CreateHubProxy("mart");

            myHub.On<string, string>("ReceiveMessage", (user, message) =>
            {
                Console.WriteLine(user, message);
                Console.Read();
            });

            connection.Start().ContinueWith(task => {
                if (task.IsFaulted)
                {
                    Console.WriteLine("There was an error opening the connection:{0}",
                                      task.Exception.GetBaseException());
                }
                else
                {
                    Console.WriteLine("Connected");
                }

            }).Wait();

            myHub.Invoke<string>("SendMessage","mart","test").ContinueWith(task => {
                if (task.IsFaulted)
                {
                    Console.WriteLine("There was an error calling send: {0}",
                                      task.Exception.GetBaseException());
                }
                else
                {
                    Console.WriteLine(task.Result);
                }
            });


Когда я запускаю свой клиент, метод Sendmessage на моем сервере работает отлично. Тестовая строка помещается в мой txt-файл. Но.. Я не получаю свое сообщение обратно с сервера.

Я также попробовал сделать это с помощью кнопки на моей странице default.aspx на сервере, но это тоже не сработало

protected void Button1_Click(object sender, EventArgs e)
        {
            var context = GlobalHost.ConnectionManager.GetHubContext<MartHub>();
            context.Clients.All.Send("ReceiveMessage", "Mart", "Test");
        }


Может ли кто-нибудь сказать мне, что здесь происходит не так?

Gerry Schmitz

Вы пытаетесь отправить сообщение самому себе с помощью широковещания? Это что, нормальное явление?

0 Ответов