我只是想让 SignalR 与 IIS 上的 Asp.Net Core 一起使用。它在本地运行得很好(当然),但是部署后我得到:
HttpRequestException:响应状态码不表示成功: 401(未经授权)。
这发生在
await hub.StartAsync();
被称为,在我的IIS中我有:
这是一个内联网站点,这是必需的。
I am currently initializing the Hubs like this:Hub = new HubConnectionBuilder()
.WithUrl(navMan.ToAbsoluteUri(hubPath), options =>
{
options.Transports = Microsoft.AspNetCore.Http.Connections.HttpTransportType.WebSockets;
options.UseDefaultCredentials = true;
})
.WithAutomaticReconnect()
.Build();
此时,我已经改变了一切,我不知道哪条路是向上的。我想我的问题是:如何让它在 Asp.Net Core 环境中工作?能行吗?您还需要我来解决什么问题吗?谢谢你。
编辑:看起来是已知问题:https://github.com/dotnet/aspnetcore/issues/25000
在使用 Windows 身份验证构建 Blazor Server 聊天应用程序时也遇到了此异常。谷歌搜索了一下发现了这个ASP.NET Core SignalR 中的身份验证和授权 - Windows 身份验证
我添加了 NameUserIdProvider 类,将其添加到 Startup.cs 中,没有更多问题。
我使用 .NET Framework 和自托管服务器,而不是 ASP.NET Core。我不确定这对于此类问题是否重要。
我尝试将我的网站设置为“受信任”,尝试使用和不使用 FQDN,并尝试添加 NameUserIdProvider。这些都不起作用。
对我来说,我发现防止 401 的唯一方法是通过 IP 地址而不是主机名进行连接。我也在使用 .NET 客户端,因此我能够使用以下内容仍然引用主机名,但将其转换为 IP 地址。
var hostEntry = Dns.GetHostEntry(hubMachineName);
var ipAddress = hostEntry.AddressList[0];
var url = $"http://{ipAddress}:8080/hubName";