问题标签 [grpc-dotnet]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
234 浏览

c# - 为 Linux 构建的 Azure 函数不包含依赖项

我们有一个在 Linux 主机上运行的 Azure 函数。
我们的应用程序是一个netcoreapp3.1. 它运行良好,除了一个我无法解释的问题。
csproj 文件一直是这样配置的(只是一个片段):

还有许多其他软件包,但这个是有问题的软件包。在 Windows 上一切正常,一切正常。在 Linux(或 WSL2)上,该应用程序也可以正常构建,Functions Host 启动并且一切似乎都很好,直到我们找到使用该Google.Cloud.Asset.V1包的代码。这个包引用Grpc.Core,然后代码失败

这对我来说似乎没有意义,因为这曾经可以工作,但csproj最近没有任何变化,除了添加的其他依赖项,但与此无关。
签入不仅bin/Debug/netcoreapp3.1/bin/runtimeslinuxWindows。 VS Code 构建结果

但是,我确实在这里看到了这个目录,尽管它似乎不在错误消息的搜索路径中。这是bin/Debug/netcoreapp3.1/runtimes.
运行时

有谁知道我怎样才能让它再次工作?
我尝试将<RuntimeIdentifier>或添加<RuntimeIdentifiers>到 csproj 中,但这并没有改变任何东西。

0 投票
1 回答
78 浏览

c# - c# gRPC Context.Connection.ClientCertificate 在服务器端始终为空

我有一个托管在 .NET 5 Web 项目上的 gRPC 服务,我从另一个包含 gRPC 客户端的 .NET 5 Web 项目调用该服务。我需要使用证书保护通道,使用 JWT 令牌保护应用程序,我使用了以下代码:

客户端,gRPC 客户端:

服务器端,Startup.cs:

我在服务器端还有一个自定义 AuthenticationHandler,如果请求是使用 gRPC 发出的,我在其中检查客户端是否提供了证书,但是属性 Context.Connection.ClientCertificate 始终为空:

使用以下ClientCertificate代码从 pfx 文件实例化:

怎么了?

谢谢

0 投票
1 回答
4116 浏览

asp.net-core - .Net 5:在 Windows Server 2019 的 IIS 10 中托管 ASP.NET Core gRPC 服务

根据 Microsoft Doc 中的这篇文章和这个警告部分:

ASP.NET Core gRPC 对与 Azure 应用服务或 IIS 一起使用有额外的要求。有关可以在何处使用 gRPC 的更多信息,请参阅 .NET 支持平台上的 gRPC。

我使用上面的文档指南在包中创建了一个ASP.Net Core gRPC服务。.NET 5Grpc.AspNetCore(2.34.0)

对于本文档,我在 IIS 中托管了我的服务

我的问题RPC:我在客户端的调用方法中收到错误。

给定错误:

补充:我在网上搜索并调查了很多问题,但这些问题对我没有帮助。仍然,我有这个错误。我想对这个动作有误解或错过的问题。

我的主要问题:此时实际上可以在 IIS 中托管 ASP.NET Core Grpc 服务。

OS:Windows Server 2019 版本 1809 内部版本 17763.1697

IIS:版本 10.0.17763.1

客户代码:

我得到了这个例外:Status(StatusCode="Cancelled", Detail="No grpc-status found on response.")在 catch 块中。

0 投票
0 回答
418 浏览

c# - gRPC - 如果空闲时间过长,双向流将进入 TRANSIENT_FAILURE

我正在尝试让一个相当简单的测试场景起作用 - 我想创建一个可以长期闲置的长期双向流 rpc(具有本地服务器的电子应用程序)。

Node gRPC 客户端在本地启动 C# gRPC 服务器并启动双向流。流服务接收每条消息,等待 50 毫秒,然后将其发回。

Node 客户端测试代码设置为发送 5 条消息,等待 30 秒,然后再发送 5 条消息。前 5 条消息成功往返。第二个 5 消息最终是往返的,但直到 5 分钟后。在此期间未命中服务器端代码。

我确定我在这里是一只狒狒,但我不明白为什么连接似乎如此迅速地消失。我也不确定这里有哪些选项可以提供帮助(如果有的话)。似乎keepalive是为了跟踪 TCP 连接是否仍然存在,但实际上并不能帮助它保持活跃。idleTimeout似乎也不相关,因为我们将TRANSIENT_FAILURE根据此处的枚举文档确定状态。

这个 2016 年的讨论与我想要做的很接近,但解决方案是 RYO 心跳。这个 grpc-dotnet 问题似乎依赖于特定于 ASP.NET 的心跳类型解决方案,该解决方案当前未使用。

gRPC 服务器日志:

发送前 5 条消息后:

传输 000001A7B5A63090 设置连接状态 = 4

启动 BDP ping err...“端点读取失败”(释义)

5 分钟后,就在第二组 5 条消息通过之前:

W:000001A7B5AC8A10 SERVER [ipv6:[::1]:57416] 状态 IDLE -> WRITING [RETRY_SEND_PING]

节点库是@grpc/grpc-js

tl;dr 如何在停机的情况下保持连接健康并正常工作?

0 投票
1 回答
62 浏览

grpc - 2对客户端/服务器是否可以只使用一个gRPC通道

我有一个用例迫使我使用 2 对客户端/服务器,例如:我有 2 个进程,每个进程都在扮演客户端/服务器角色,因此我必须创建 2 对客户端/服务器。我的问题是尽量减少创建 2 个通道来实现这种通信的开销,我们是否有可能只使用一个通道?

注意:双流无济于事,因为在我的情况下,这两个进程扮演服务器/客户端角色。

感谢您提供任何进一步的帮助。

0 投票
1 回答
75 浏览

c# - GRPC - 使用完 IService 后是否需要处理或关闭它?

当我完成使用IService时,是否需要做一些事情来关闭/销毁它?

0 投票
1 回答
147 浏览

c# - 无法访问客户端中的 RpcException 预告片

我正在将预告片从服务器发送到客户端,但在客户端我无法访问这些预告片。

服务器:

客户端(Blazor):

它正在进入if。拖车计数应为 1 时为 0。

0 投票
0 回答
25 浏览

rest - 带有 gRPC 和 Rest 的服务为 swagger url 显示 ServiceUnimplemented

我有一个 webapi 服务,它服务于 codefirst grpc 实现,也是一个典型的 restful http 端点。

有没有办法将 grpc 设置为仅使用指定的路由\端点?它似乎只监听给定的端口。

其结果是例如当服务启动时:

具有路由模式“{unimplementedService}/{unimplementedMethod}”的端点“gRPC - 未实现的服务”对于请求路径“/swagger/index.html”无效

有没有办法让 grpc 忽略这个?

在对控制器进行休息调用时,我没有看到这个输出,所以这里可能也没有太大的影响。

0 投票
0 回答
101 浏览

asp.net-core - ASP.NET Core 中的 gRPC 身份验证,正确响应

在 ASP.NET Core 的 gRPC 文档中,使用标准身份验证实现是对客户端进行身份验证的正确方法。但是,如果我使用它,未经身份验证的请求会返回 HTTP 状态 401。 ASP.NET Core 文档:

gRPC 具有众所周知的响应状态代码,包含“未验证”(16) 和 PERMISSION_DENIED (7)。gRPC 文档:

服务应该如何正确响应?默认情况下的 HTTP 状态,就像默认情况下的 ASP.NET Core 一样,还是 gPRC 状态代码?如果通过 gRPC 状态,扩展默认 ASP.NET Core 身份验证以将 HTTP 状态转换为 gRPC 状态响应的更好方法是什么?

0 投票
1 回答
581 浏览

asp.net-core - 在 ASP.NET Core 5.0 应用程序中同时托管 GRPC 服务和 REST 控制器

我有一个用 ASP.NET Core 5.0 编写的 GRPC 服务,我想添加一个经典的 REST 控制器来探索其在开发阶段的内部状态。

不幸的是,我遇到了一些路由问题。

这是Startup类的相关端点部分

控制器在点击时可访问,/values/但在尝试探索特定资源/values/123/values/1234/2345. (在我的真实情况下,ID 是 GUID,而不是整数,如果有任何区别的话)。

当我注释掉时,一切都按预期工作

我还尝试通过执行并排启用 HTTP 1 和 HTTP 2

但这也无济于事。

谢谢你的帮助!