401 Несанкционированная ошибка или нет возврата сообщения в SignalR для WinForms - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь создать простой концентратор 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, но не получу и значение сообщения.

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

То, что я пробовал до сих пор:

  1. Попытка установить свойства 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.

enter image description here

Проверка, действительно ли сообщение было передано в концентратор при использовании:

context.Clients.All.broadcastMessage ("NAM", "Новая запись создана.");

Сообщение было там.

Кто-нибудь передал проблему с несанкционированным и смог прочитать сообщения из MVC Server SignalR концентратор на клиент WinForms?

1 Ответ

0 голосов
/ 01 октября 2019

Мне удалось решить это самостоятельно. Проблема заключалась в том, что сервер (который уже был настроен ранее, а не мной) имел базовую аутентификацию с именем пользователя и паролем. Это вообще не было видно ни с одним атрибутом [Authorization], ни с чем-либо, но оно все еще было там.

Я решил это, настроив свойство Credentials в hubConfiguration:

hubConnection.Credentials = new NetworkCredential("user.name", "password");

Аутентификация иподключение к концентратору прошло успешно, и сообщение было возвращено с сервера клиенту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...