C# 401 WinForms的信号器中出现未经授权的错误或未返回消息
我试图在MVC服务器端和WinForms客户端之间创建简单的信号器集线器 我创建了NotificationHub类,具体如下:C# 401 WinForms的信号器中出现未经授权的错误或未返回消息,c#,asp.net-mvc,winforms,signalr,C#,Asp.net Mvc,Winforms,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
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();
我将从signer自托管的localhost获得401个未经授权的响应。(本地主机作为与客户端WinForms应用程序相同的项目中的不同解决方案并行运行)
我在服务器端尝试做的是将消息从如下代码推送到集线器:
hubConnection.Start().Wait();
var context = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
context.Clients.All.broadcastMessage("NAM", "New entry created.");
WindowsAuth
和AnonymousAuth
属性设置为已启用
是否有人通过了未经授权的问题,并且能够将消息从MVC Server SignalR hub读取到WinForms客户端?我自己设法解决了这个问题。问题是服务器(以前已经安装过,不是我安装的)具有用户名和密码的基本身份验证。 这在任何[Authorization]属性或任何东西中都不可见,但它仍然存在 我通过在hubConfiguration上设置Credentials属性解决了此问题:
hubConnection.Credentials = new NetworkCredential("user.name", "password");
身份验证和到集线器的连接成功,消息从服务器返回到客户端。可能与此无关,但集线器中似乎有输入错误uri@LennartStoop谢谢你的回答。你指的是哪一个打字错误?也许我遗漏了一些愚蠢的东西。我指的是客户端的uri:它不应该是
signalr
而不是singalr
?@LennartStoop修复了这个问题,但问题仍然存在(如果在没有.Wait()
的情况下运行,则不会出现异常的原因是hubConnection.Start()
返回一个任务,该任务需要等待或.Wait()
编辑,否则它将永远不会运行。因此,当您忽略它时,它不会尝试连接(并且您也不会收到广播消息)。
hubConnection.Credentials = new NetworkCredential("user.name", "password");