簡體   English   中英

嘗試連接到 SignalR 時出現錯誤 204

[英]Error 204 when trying to connect to SignalR

我無法在 Windows 7 下運行的 ASP.NET Core 2.0.3 應用程序中連接到我的 SignalR 集線器。我使用來自 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(() => {});

在我的情況下,我必須刪除允許任何來源並將其替換為 WithOrigins 和 AllowCredentials

 options.AddPolicy("policy",
            builder =>
            {
                builder.WithOrigins("http://localhost:8081");
                builder.AllowAnyMethod();
                builder.AllowAnyHeader();
                builder.AllowCredentials();

            });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM