Клиент 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
Вы пытаетесь отправить сообщение самому себе с помощью широковещания? Это что, нормальное явление?