我在我的项目中使用ASP.Net样板架构,并使用Ocelot网关。
不使用网关,我可以成功地从我的角度应用程序访问signalr。
但是,当我试图通过API网关访问signalr时,所有请求都处于挂起状态,并得到此错误
下面是我对signalr的configuration.json更改
然后,我对网关的Startup.cs文件进行了更改。
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);
}
发布于 2021-12-28 05:42:41
下面的更改对我有效。在configuration.json中应用了以下更改
{
"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
https://stackoverflow.com/questions/70462901
复制相似问题