protobuf-net.Grpc https://github.com/protobuf-net/protobuf-net.Grpc现在是一件事......尽管处于预览阶段。当 .NET Core 3 发布时,我们应该能够提供此功能。
它受到 WCF 方法的启发,因此您的服务接口是通过以下方式定义的:
namespace Whatever {
[ServiceContract]
public interface IMyAmazingService {
ValueTask<SearchResponse> SearchAsync(SearchRequest request);
// ... etc
}
}
服务器只是实施界面:
public class MyServer : IMyAmazingService {
// ...
}
(如何托管它们取决于您使用的是 ASP.NET Core 还是本机/非托管 gRPC 库;两者都可以)
和客户只是request界面:
var client = http.CreateGrpcService<IMyAmazingService>();
var result = await client.SearchAsync(query);
在上述情况下,这将被推断为Whatever.MyAmazingService
/ Search
gRPC 术语中的服务,即
package Whatever;
// ...
service MyAmazingService {
rpc Search (SearchRequest) returns (SearchResponse) {}
}
但如果您愿意,可以更明确地配置服务/方法名称。上面是一个一元的例子;对于一元运算,结果可以是以下任意一个T
, Task<T>
, ValueTask<T>
- or void
/ Task
/ ValueTask
(全部映射到.google.protobuf.Empty
,就像没有合适输入参数的方法一样)。
如果您使用,则会自动推断流/双工操作IAsyncEnumerable<T>
(对于一些T
)用于输入参数(客户端流)、返回类型(服务器流)或两者(双工)。