【发布时间】:2017-11-30 12:06:35
【问题描述】:
我无法连接到在 Windows 7 下运行的 ASP.NET Core 2.0.3 应用程序中的 SignalR Hub。 我使用来自 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 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?}");
});
}
在测试页面中:
let transportType = signalR.TransportType[getParameterByName('transport')] || signalR.TransportType.WebSockets;
let http = new signalR.HttpConnection(`http://${document.location.host}/hubs`, { transport: transportType });
var connection = new signalR.HubConnection(http);
但是当此代码执行时,我从服务器收到错误 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 ");
【问题讨论】:
-
状态码 204 不是错误。
-
在浏览器控制台中我读到:“WebSocket 连接到 'ws://localhost:51278/hubs?id=c9d62f69-8dac-408b-ac7a-10521eefd30f' 失败:WebSocket 握手期间出错:意外响应代码:204" 错误:无法启动连接。未定义
标签: javascript c# asp.net signalr asp.net-core-signalr