首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试连接到SignalR时出现错误204

尝试连接到SignalR时出现错误204
EN

Stack Overflow用户
提问于 2017-11-30 20:06:36
回答 2查看 1.8K关注 0票数 2

我无法连接到Windows7下运行的SignalR核心2.0.3应用程序中的ASP.NET集线器。我使用来自NuGet的SignalR 1.0.0-alpha1-final作为服务器,使用signalr- client -1.0.0-alpha2-final.min.js作为JavaScript客户端。

这是我的集线器:

代码语言: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中配置:

代码语言:javascript
运行
复制
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?}");
    });
}        

在测试页面中:

代码语言:javascript
运行
复制
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的回答,这里是工作代码:

代码语言:javascript
运行
复制
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 ");
EN

回答 2

Stack Overflow用户

发布于 2017-11-30 20:51:41

为此,在GitHub中提出了一个问题:https://github.com/aspnet/SignalR/issues/1028

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

代码语言:javascript
运行
复制
let connection = new HubConnection("someurl", { transport: signalR.TransportType.LongPolling });
connection.start().then(() => {});
票数 3
EN

Stack Overflow用户

发布于 2020-09-22 22:33:44

在我的示例中,我必须删除allow any origin,并将其替换为WithOrigins和AllowCredentials

代码语言:javascript
运行
复制
 options.AddPolicy("policy",
            builder =>
            {
                builder.WithOrigins("http://localhost:8081");
                builder.AllowAnyMethod();
                builder.AllowAnyHeader();
                builder.AllowCredentials();

            });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47573121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档