Javascript 尝试连接到信号器时出现错误204
我无法连接到在Windows 7下运行的ASP.NET Core 2.0.3应用程序中的信号集线器。 我使用NuGet的SignalR 1.0.0-alpha1-final作为服务器,SignalR-client-1.0.0-alpha2-final.min.js作为JavaScript客户端 这是我的中心:Javascript 尝试连接到信号器时出现错误204,javascript,c#,asp.net,signalr,asp.net-core-signalr,Javascript,C#,Asp.net,Signalr,Asp.net Core Signalr,我无法连接到在Windows 7下运行的ASP.NET Core 2.0.3应用程序中的信号集线器。 我使用NuGet的SignalR 1.0.0-alpha1-final作为服务器,SignalR-client-1.0.0-alpha2-final.min.js作为JavaScript客户端 这是我的中心: using System; using System.Threading.Tasks; using Microsoft.AspNetCore.SignalR; namespace MyP
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.SignalR;
namespace MyProject
{
public class MyHub: Hub
{
public override async Task OnConnectedAsync()
{
await Clients.All.InvokeAsync("Send", $"{Context.ConnectionId} joined");
}
public Task Send(string message)
{
return Clients.All.InvokeAsync("Send", $"{Context.ConnectionId}: {message}");
}
}
}
在startup.cs中配置:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseHangfireDashboard();
app.UseHangfireServer();
app.UseSignalR(routes =>
{
routes.MapHub<MyHub>("hubs");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
}
但是当这个代码执行时,我从服务器得到一个错误204
更新
根据@Gabriel Luci的回答,工作代码如下:
let transportType = signalR.TransportType.LongPolling;
let http = new signalR.HttpConnection(`http://${document.location.host}/hubs`, { transport: transportType });
let connection = new signalR.HubConnection(http);
connection.start();
connection.on('Send', (message) => {
console.log(message);
});
...
connection.invoke('Echo', "Hello ");
GitHub中提出了一个问题: 显然,WebSocket在IIS和IIS Express中不起作用。您需要使用长轮询。该期中有一段示例代码:
let connection = new HubConnection("someurl", { transport: signalR.TransportType.LongPolling });
connection.start().then(() => {});
在我的情况下,我必须删除allow any origin并将其替换为WithOrigins和AllowCredentials
options.AddPolicy("policy",
builder =>
{
builder.WithOrigins("http://localhost:8081");
builder.AllowAnyMethod();
builder.AllowAnyHeader();
builder.AllowCredentials();
});
状态代码204不是错误。在浏览器控制台中,我读到:“WebSocket连接到'ws://localhost:51278/hubs?id=c9d62f69-8dac-408b-ac7a-10521eefd30f'失败:WebSocket握手期间出错:意外响应代码:204”错误:启动连接失败。undefinedIt是真的,我必须使用LongPolling(argh…),但代码不起作用。我还必须添加一个HttpConnection。我应该创建一个新的答案来显示工作代码还是将其发布在这里的评论中?您可以编辑您的问题并将代码添加到底部。由你决定。这绝对是难以置信的。我在VS2017中运行,可以肯定的是,如果不更改传输类型,就无法实现这一点。为什么IIS Express甚至在VS2017中都不支持WebSocket?说真的,微软?哦。因此,对于任何遇到此问题的人来说,websocket支持需要IIS Express 8.0+和Windows 8+或Windows Server 2012+。因此,如果您在Windows 7计算机上开发本地应用程序(就像我一样),则无法测试WebSocket,因为无论您运行的是哪个版本的IIS Express,都没有操作系统级支持代码>
options.AddPolicy("policy",
builder =>
{
builder.WithOrigins("http://localhost:8081");
builder.AllowAnyMethod();
builder.AllowAnyHeader();
builder.AllowCredentials();
});