我正在尝试添加gRPC到一个现有的ASP.NET核心7项目。它是一个旧的代码库,所以它没有使用现代的WebApplication.CreateBuilder(args)
方法。
这是我的Configure
方法,其中我在端点Map配置中添加了MapGrpcService
和MapGrpcReflectionService
:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseOpenApi();
app.UseSwaggerUi3(c => {
c.OAuth2Client = new NSwag.AspNetCore.OAuth2ClientSettings() { ClientId = null, ClientSecret = null };
});
app.UseCors(c => {
c.AllowAnyOrigin();
c.AllowAnyMethod();
c.AllowAnyHeader();
});
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapGrpcService<StateStoreService>();
if (env.IsDevelopment())
endpoints.MapGrpcReflectionService();
endpoints.MapControllers();
});
}
如果我尝试使用Insomnia(REST/gRPC客户端GUI)访问gRPC端点,我会收到错误消息
13 13接收到代码为2的RST_STREAM,由内部客户端错误触发:方案错误
使用命令行工具
./grpcurl -plaintext localhost:5010 data_provider_service.v1.StateStore/ReadStates
我得到
无法拨打目标主机"localhost:5010":超出上下文截止日期
有趣的是,在某个时候gRPC服务是工作的(我认为使用相同的代码-它的行为似乎有点不确定),但随后常规HTTP请求确实失败了,并在浏览器中出现CORS错误。
- 问题:**
我需要如何配置我的应用,以便gRPC端点和我现有的HTTP端点同时工作?
- 更新日期:**
这似乎是协议不匹配引起的问题。所以让我给你一些更多的背景:我正在将gRPC添加到一个提供不安全HTTP API的遗留应用程序中。为了向后兼容,这不应该更改为HTTPS。所以我想问题可以归结为:我的应用如何同时提供不安全的HTTP API(显然需要HTTP/1.1)和gRPC API(显然需要HTTP/2)?
2条答案
按热度按时间rkttyhzu1#
HTPP 1.1和gRPC都有API是可能的,但不太可能是同一个,您需要为它们各自构建API。
kqlmhetl2#
解决办法其实简单明了。
我的ASP.NET核心应用程序继续侦听现有端口上的HTTP连接,因此现有客户端不会中断。
此外,它监听HTTPS连接的新端口,支持来自新客户端的REST调用和gRPC调用。