问题标签 [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 回答
5550 浏览

c# - 如何在 ASP.NET Core 中为 gRPC 服务添加全局异常处理程序?

我正在使用 GRPC.ASPNETCore 使用 ASP.NET Core 编写 gRPC 服务。

我尝试为这样的 gRPC 方法添加异常过滤器

或使用这样的UseExceptionHandler扩展方法

但是它们都不起作用(不拦截代码)。

是否可以在 ASP.NET Core 中为 gRPC 服务添加全局异常处理程序?

我不想try-catch为我想调用的每个方法编写代码包装器。

0 投票
1 回答
3484 浏览

c# - 为 gRPC 客户端创建接口以进行单元测试

我有一个带有生成的 gRPC 客户端的 dotnet core 3 控制台应用程序项目(使用下面 csproj 中的 Protobuf 元素)。我想对我的代码进行单元测试。有没有办法生成我的 gRPC 客户端以包含生成的类的接口,以便我可以正确地模拟 gRPC 客户端?

感谢您的时间!

0 投票
1 回答
2035 浏览

.net-core - 使用 MSBuild 构建 gRPC dotnet 核心项目时如何包含自定义目录

我有一个 dotnet core gRPC 项目,我正在尝试在我的 proto 文件中包含路由注释,如下所示:

文件结构是这样的(因为我将googleapis存储库作为 git 子模块导入):

在 go 项目中,它可以通过以下方式完成:

where-I ./googleapis为编译器提供了可以找到annotations.proto文件及其依赖项的目录。

但是,当我在使用如下配置的 dotnet grpc 项目中使用 MSBuild 时,我无法弄清楚如何包含自定义目录。

官方文档提到了自定义目标构建的替代方法,以便我可以使用protoc

但是上面的命令忽略了服务定义并且不会生成这里提到的服务器存根代码,而 MSBuild 会生成。

我发现但不理想的解决方法:

我意识到Grpc.Toolsdotnet 包分发了一些常用的 proto 文件,所以我annotations.proto在那里复制了它的依赖项(在 macOS 中)并且它起作用了:

更新:

另一种解决方法:

默认情况下包含项目根目录,因此将其用作基本路径并在那里复制导入的 proto 文件也可以(更好但仍然不理想)。

任何想法如何通过 MSBuild 包含上述自定义目录?

0 投票
0 回答
706 浏览

c# - 如果使用 > 1 个客户端,则具有自己的流请求的 Grpc 多个客户端调用服务器 grpc 方法会失败

我创建了 2 个客户端来使用流请求调用 2 个不同的服务器。

我希望看到来自 2 个客户的结果。相反,我看到 1 个客户端成功运行,2 个客户端失败

状态(状态代码=内部,详细信息=“”)

第一个被成功调用。
第二个失败,出现异常“启动 gRPC 调用时出错:无法建立 SSL 连接”

如果我评论第一个呼叫,则成功执行第二个呼叫的调用。
如果我取消注释第一个调用,第二个调用的调用将失败。

故障排除没有帮助,调试过程中没有出现任何调试参数。

0 投票
1 回答
257 浏览

c# - 如何创建 gRPC ContextPropagationToken

我正在创建一个用于测试的内存 gRPC 通道。(这是在 C# 中)。这涉及实现调用调用程序,而调用调用程序又涉及实现服务器调用上下文。您需要实现的方法之一具有以下签名

不幸的是,我看不到任何方法来创建这样的令牌。事实证明,就我目前的目的而言,这不是必需的,但是有没有一种方法可以通过反射来创建或获取这样的对象。

0 投票
1 回答
905 浏览

grpc - 如何在 Grpc.AspNetCore.Client 上配置 KeepAlive?

我正在尝试使用Grpc.Net.Client为 gRPC 连接配置KeepAlive设置。原始SDK通过将对象注入构造函数来支持这一点。我看不到通过新的 .NET Core 3.1 API 进行设置的任何方法。这可能吗?ChannelOptionChannel

0 投票
0 回答
1230 浏览

c# - gRPC 我应该在 C# 中关闭客户端通道吗?

我已经用 C# 实现了一个 gRPC 客户端。我应该关闭析构函数中的通道吗?

0 投票
1 回答
2747 浏览

grpc-dotnet - 为什么我在尝试从编写 .net 核心的 gRPC 服务获取数据时收到 Grpc.Core.RpcException

我有一个 gRPC 服务(用 .net core 3.1 编写)部署在 windows 服务器中,作为在 kerstel 中运行的自托管服务。

在此处输入图像描述 我添加了以下配置以使服务在 https 中运行。

使用下面的代码

我得到以下异常,内部异常为空。

Status(StatusCode=Internal, Detail="启动 gRPC 调用时出错:无法建立 SSL 连接,请参阅内部异常。")

在此处输入图像描述

我应该添加什么来让客户端从服务中获取数据吗?

提前致谢

0 投票
2 回答
2124 浏览

asp.net-core - protobuf-net.grpc 客户端和 .NET Core 的 gRPC 客户端工厂集成

我正在使用 proto 文件试验 gRPC 服务和客户端。建议是在 .NET Core ( https://docs.microsoft.com/en-us/aspnet/core/grpc/clientfactory?view=aspnetcore-3.1 ) 中使用 gRPC 客户端工厂集成。为此,您需要注册从 Grpc.Tools 包生成的 Grpc.Core.ClientBase 派生的客户端,如下所示:

我的理解是 MyGrpcClientType 被 DI 注册为一个临时客户端,这意味着每次注入时都会创建一个新的,但是客户端与 HttpClientFactory 集成在一起,允许重用通道而不是每次都创建。

现在,我想使用 protobuf-net.grpc 从接口生成客户端,看起来是这样完成的:

如果我正确地认为创建通道的成本很高,但客户端很便宜,那么如何使用 protobuf-net.grpc 实现与 HttpClientFactory 的集成(以及底层通道的重用)?上面似乎每次我想要一个客户端时都会创建一个 GrpcChannel ,那么重用通道的正确方法是什么?

同样,是否可以在 ASP.Net Core 中使用以下代码注册 protobuf-net.grpc 生成的服务类?

endpoints.MapGrpcService<MyGrpcServiceType>();

(请纠正以上任何误解)

0 投票
1 回答
321 浏览

grpc - 如何在不使用具体实例的情况下创建 dotnet gRPC 服务器

所以我正在尝试构建一个同时具有 REST 和 gRPC 的 .Net Core 应用程序。

预期结果:运行一个应用程序,该应用程序支持一个端口上的工作 REST 和另一个端口上的 gRPC。

REST 很简单。这是应用程序开始的地方。但是要配置 gRPC 的端口,我看到我需要创建一个服务器实例:

这一切都很好,直到我们真正使用它,并且像任何其他“控制器”GreeterImpl 一样需要服务的依赖注入:

现在第一个代码片段将不起作用,因为“new GreeterImpl()”需要一个 IExampleService。我在网上搜索了如何在不使用具体实现的情况下获取 ServerServiceDefinition (从 Greeter.BindService() 返回的东西),但一无所获。那么,这应该怎么做呢,还是我走上了完全错误的道路?