问题标签 [protobuf-net.grpc]
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.
.net - Protobuf-net - 如何使用 oneof
我对oneof
in的用法进行了快速搜索Protobuf-net
,似乎从 v2.3.0 开始支持它,但我终其一生都找不到任何关于如何使用它的示例!
我的要求很简单,也许这也可以解决,[ProtoInclude]
但我不太确定这将如何工作。我有以下课程:
其中Message
可以是 8 种不同已知类型中的 1 种。这些类型根本不会相互继承,尽管可以更改代码,但所有类型都没有任何共同点。
使用Google.Protobuf
我希望做与此类似的事情,其中我有一个名为的属性Instrument
,它可以是上面示例中的两种类型之一,然后InstrumentOneofCase
用来确定我被赋予了哪种类型。但是我如何实现同样的目标Protobuf-net
呢?
编辑:我将保留原来的问题,但也许更多人可以涉及到的更好的问题是:你将如何实现与Protobuf-net 中的这个 MS 示例 相同的事情?无论是在编写类本身方面还是在确定参数最终是什么具体类型方面?
c# - 在 ASP.NET MVC(不是 .NET Core)中注入 Grpc 通道和 grpc 服务的正确方法是什么,特别考虑优雅的 ShutdownAsync?
我有一个 ASP.NET MVC 项目,它使用 NInject 作为 IOC 并protobuf-net.Grpc
以代码优先的方式调用 grpc 服务。
目前,它是这样使用的(完全跳过 IOC),这显然有很多代码味道。
grpc
Channel
不在请求之间重用,我认为在 NInject 中使用 Singleton 范围可以更好地注入该服务是通过
CreateGrpcService
和ShutdownAsync
在每个操作中创建的(每个请求一次,这也很浪费),尽管我不知道在重用的 grpc 通道实例之上创建一个 grpc 服务需要多少开销。
尽管代码有异味,但至少它严格遵循protobuf-net.Grpc
' 指南:
很自然的想法是把创建Channel
和ILikeService
移入NInject。在我看来,两者都可以作为 Singleton 注入。
剩下的唯一问题是是否必须打电话Channel.ShutdownAsync
?我无法在 Ninject 中找到一种自然的方式。我只能想到两个不合理的选择:
跳过调用
ShutdownAsync
,我不确定后果,考虑到 ASP.NET MVC 进程本身可能被干净或不干净地关闭把它叫进来
MvcApplication.Application_End
。我不确定在不正常关机的情况下是否会调用此方法。
谢谢如果有人能给我指点。
c# - 如何在 protobuf-net 代码中首先使用(打包)Google.Protobuf.WellknownTypes.Any gRPC
我正在创建一个 gRPC 服务,我们决定使用 protobuf-net 选择代码优先方法。现在我遇到了一个场景,我们有几个需要包装的类。我们不想在 MyMessage 类中定义 KnownTypes(只是一个示例名称来说明问题)。所以我正在尝试使用目前让我在打包方面遇到一些困难的 Any 类型。
示例代码具有 MyMessage ,它定义了一些标头值,并且必须可以将任何类型作为有效负载传递。
在代码中的某处,我用有效负载构造了我的消息......
这不起作用,因为Payload1
并且Payload2
需要实施Google.Protobuf.IMessage
. 由于我无法弄清楚如何并且根本找不到很多信息如何做到这一点,我想知道我是否走错了路。
- 如何在 protobuf-net 中使用 Any?
- 是否有一种简单(但兼容)的方法将 C# 代码第一类打包到 Google.Protobuf.WellknownTypes.Any 中?
- 我真的需要实现 Google.Protobuf.IMessage 吗?
c# - protobuf-net.Grpc 流量/拥塞控制
我正在开发一个程序,该程序将通过 gRPC 从服务器异步加载大量数据(两端都使用 protobuf-net.Grpc)。
虽然我可以简单地通过 向客户端发送大量数据IAsyncEnumerable
,但有时我希望提前发送某些部分的优先级(优先级是动态确定的,并且一开始不知道,有点像发送视频流并向前跳过)。
如果我每次都发送数据并等待响应,我会留下大量未使用的带宽。另一种方法是向客户端抛出大量数据,这可能导致网络拥塞并无限期延迟优先数据包。
我可以在这里为自己使用 HTTPS/2s / TCPs 流量/拥塞控制吗?或者我是否需要在 gRPC 之上实现一个基本的流量/拥塞控制系统?
更准确地说:我想发送尽可能多的数据而不填满任何内部缓冲区,从而导致延迟。
protobuf-net - protobuf-net:为具有通用方法的服务创建客户端时出现异常
我正在使用 protobuf-net v3.0.101 并在为具有通用方法的服务创建客户端时遇到一个异常。假设服务是这样的:
在创建客户端时,我遇到以下错误:
有没有办法,我可以解决这个问题?任何更新 ?
c# - 如何判断ac#Grpc.Net.Client是否连接成功
我们有使用 Grpc.Net.Client 包的 gRPC 客户端——当服务创建并设置异步回调时,要知道服务是否已启动并正确连接似乎并不容易。
我们当前的解决方案是通过 HttpRequestException 等待异步调用失败(大约一秒钟后),然后我们返回并尝试在一个长时间运行的循环中再次订阅服务,直到我们恢复并运行服务。有没有一种方法可以 a) 在我们尝试调用我们的 subscribe 方法之前确定服务的状态,并且 b) 有没有比捕获异常和循环更好的方法来处理我们的服务?
请注意,即使服务关闭,服务的创建和对订阅的调用也会正常工作并返回而不会出错,并且 foreach 循环会被执行,然后大约 1 秒后会引发异常。我也真的不想依赖睡眠声明!
代码看起来像这样:
有关服务声明的信息(使用代码优先 gRPC,.net Core 5):