首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SignalR不使用Ocelot网关

SignalR不使用Ocelot网关
EN

Stack Overflow用户
提问于 2021-12-23 13:38:40
回答 1查看 629关注 0票数 1

我在我的项目中使用ASP.Net样板架构,并使用Ocelot网关。

不使用网关,我可以成功地从我的角度应用程序访问signalr。

但是,当我试图通过API网关访问signalr时,所有请求都处于挂起状态,并得到此错误

下面是我对signalr的configuration.json更改

然后,我对网关的Startup.cs文件进行了更改。

代码语言:javascript
运行
复制
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        if (_ocelotSwaggerConfiguration.IsSwaggerEnabled)
        {
            app.UseSwaggerForOcelotUI(Configuration);
        }

        // Enable ReDoc Documentation
        app.UseReDoc(c =>
        {
            c.DocumentTitle = "AI API";
            c.SpecUrl = "/swagger/docs/v1/pitch-ai";
            c.RoutePrefix = string.Empty;
            c.IndexStream = () => Assembly.GetExecutingAssembly()
                .GetManifestResourceStream("AI.Api.Gateway.api_docs.ui.index.html");
            c.HeadContent = GetRedocHeaderContent();
        });

        app.UseAuthentication();
        app.UseStaticFiles();

        app.UseMetricServer();
        app.UseMiddleware<ResponseMetricMiddleware>();
        app.UseHttpMetrics();
        app.UseWebSockets();
        app.UseHealthChecks("/ready", new HealthCheckOptions
        {
            Predicate = r => r.Tags.Contains("services")
        });

        app.Map("/switch", appBuilder =>
        {
            appBuilder.Run(async context =>
            {
                running = !running;
                await context.Response.WriteAsync($"{Environment.MachineName} running {running}");
            });
        });

        app.UseHealthChecks("/health", new HealthCheckOptions
        {
            Predicate = r => r.Name.Contains("health")
        });

        app.UseMetricsAllEndpoints();
        
        app.UseOcelot().ContinueWith(t => Log.Error(t.Exception.Message, t.Exception), System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted);
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-28 05:42:41

下面的更改对我有效。在configuration.json中应用了以下更改

代码语言:javascript
运行
复制
{
      "DownstreamPathTemplate": "/{everything}",
      "DownstreamScheme": "ws",
      "UpstreamPathTemplate": "/{everything}",
      "UpstreamHttpMethod": [ "GET", "POST", "PUT", "DELETE", "OPTIONS" ],
      "SwaggerKey": "ai",
      "ServiceName": "ai-web-api",
      "RateLimitOptions": {
        "ClientWhitelist": [],
        "EnableRateLimiting": true,
        "Period": "1s",
        "PeriodTimespan": 1,
        "Limit": 10
      }
    }

另外,我发现在网关项目中我不需要Microsoft.AspNetCore.SignalR.Client

我在app.UseOcelot() in Startup.cs之前搬到了Startup.cs

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

https://stackoverflow.com/questions/70462901

复制
相关文章

相似问题

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