我无法在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 ");

最佳答案

GitHub对此提出了一个问题:https://github.com/aspnet/SignalR/issues/1028

显然,WebSockets在IIS和IIS Express中不起作用。您需要使用长轮询。在该问题中有一个示例代码片段:

let connection = new HubConnection("someurl", { transport: signalR.TransportType.LongPolling });
connection.start().then(() => {});

09-25 16:55
查看更多