作者:28划生12_928 | 来源:互联网 | 2022-11-08 09:52
我正在尝试使用gRPC在工作中构建PoC。此处的google文档为我们提供了一个示例应用程序。我想知道protobuf-net(尤其是protogen)是否有能力理解执行gRPC调用所需的服务定义和类?还是正在处理某些问题?如果我将google的protoc用于客户端和服务器代码生成(涉及服务定义和RPC调用),并将protobuf-net用于我的业务对象,是否可以使用?
1> Marc Gravell..:
protobuf-net.Grpc现在是一个东西...尽管处于预览状态。当.NET Core 3发布时,我们应该可以使用它。
它受WCF方法的启发,因此可以通过以下方式定义服务接口:
namespace Whatever {
[ServiceContract]
public interface IMyAmazingService {
ValueTask SearchAsync(SearchRequest request);
// ... etc
}
}
服务器只实现接口:
public class MyServer : IMyAmazingService {
// ...
}
(如何托管它们取决于您使用的是ASP.NET Core还是本机/非托管gRPC库;两者均可工作)
客户只要求接口:
var client = http.CreateGrpcService();
var result = await client.SearchAsync(query);
在上述情况下,可以将其推断为gRPC术语中的Whatever.MyAmazingService
/ Search
服务,即
package Whatever;
// ...
service MyAmazingService {
rpc Search (SearchRequest) returns (SearchResponse) {}
}
但是您可以根据需要更明确地配置服务/方法名称。以上是一元示例;为一元的操作,所述结果可以是任何的T
,Task
,ValueTask
-或void
/ Task
/ ValueTask
(所有地图.google.protobuf.Empty
,一样的方法没有合适的输入参数)。
如果你使用流/全双工操作可自动推断IAsyncEnumerable
(某些T
)的输入参数(客户流),返回类型(服务器流式),或两者(双面)。