Я пытаюсь создать простой концентратор SignalR между стороной сервера MVC и стороной клиента WinForms.
Я создал класс NotificationHub, указанный следующим образом:
using System.Threading.Tasks;
using Microsoft.AspNet.SignalR;
namespace PF.Timesheet.Service
{
public class NotificationHub : Hub
{
public void Send(string name, string message)
{
Clients.All.broadcastMessage(name, message);
}
public override Task OnConnected()
{
return base.OnConnected();
}
}
}
В то время как код на стороне клиента выглядит так:
var hubConnection = new HubConnection("http://localhost:30341/singalr");
var chat = hubConnection.CreateHubProxy("NotificationHub");
string message2 = string.Empty;
chat.On<string, string>("broadcastMessage", (name, message) => { message2 = message; });
chat.On<string, string>("broadcastMessage", (name, message) =>
this.Invoke((Action)(() =>
RichTextBoxConsole.AppendText(String.Format("{0}: {1}" + Environment.NewLine, name, message)));
hubConnection.Start().Wait();
Я пытался получить сообщение от broadcastMessageлюбым возможным способом, либо назначив его какой-либо строковой переменной 'message2', либо добавив текст в элемент управления rich textbox в пользовательском интерфейсе.
Если я сделаю вызов следующим образом:
hubConnection.Start().Wait();
Iполучит 401 Несанкционированный ответ от локального хоста, на котором находится самозванец. (локальный хост работает параллельно как другое решение в том же проекте, что и клиентское приложение WinForms).
То, что я пытаюсь сделать на стороне сервера, - это отправить сообщение в концентратор из кода, подобного этому:
var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
context.Clients.All.broadcastMessage("NAM", "New entry created.");
Если я уберу Wait () из: hubConnection.Start();
Я не получу ошибку Unauthorized 401, но не получу и значение сообщения.
Кто-нибудь видит, что я здесь делаю неправильно? ?
То, что я пробовал до сих пор:
- Попытка установить свойства
EnableDetailedErrors
и EnableJSONP
в true. Я где-то читал, что концентратор SignalR по умолчанию имеет атрибут [Authorized]
и что эта конфигурация должна помочь.
public class Startup
{
public void Configuration(IAppBuilder app)
{
HttpConfiguration config = new HttpConfiguration();
WebApiConfig.Register(config);
DependencyConfig.Initialize(config);
Loging.Initialize();
app.UseWebApi(config);
app.MapSignalR(new HubConfiguration
{
EnableDetailedErrors = true,
EnableJSONP = true
});
}
}
Попытка установить свойства
WindowsAuth
и
AnonymousAuth
для проекта сервера на
Enabled
.
Проверка, действительно ли сообщение было передано в концентратор при использовании:
context.Clients.All.broadcastMessage ("NAM", "Новая запись создана.");
Сообщение было там.
Кто-нибудь передал проблему с несанкционированным и смог прочитать сообщения из MVC Server SignalR концентратор на клиент WinForms?