我在 .NET Core 服务器上使用 protobuf-net.Grpc 并尝试从 .NET Framework (4.7.2.) gRPC 客户端进行调用。完整的示例在这里: https: //github.com/angelagyang/GRPCProtobufExample
这是我的客户的片段:
var channelCreds = new SslCredentials(GetRootCertificates());
var channel = new Channel("localhost", 5001, channelCreds);
var greeter = channel.CreateGrpcService<IGreeterService>();
Run Code Online (Sandbox Code Playgroud)
StatusCode="Unknown", Detail="Stream removed"...使用此配置,我在调用服务器时收到错误。如果我在服务器上设置,我就可以连接到服务器ClientCertificateMode = ClientCertificateMode.NoCertificate。但是,我希望服务器需要客户端证书并通过指纹验证证书。
例如,在 .NET Core 中,我可以使用 Grpc.Net.Client 来配置我的通道,如下所示:
var handler = new HttpClientHandler();
handler.ClientCertificates.Add(certificate);
var channel2 = GrpcChannel.ForAddress("https://localhost:5001", new GrpcChannelOptions
{
HttpHandler = handler
});
Run Code Online (Sandbox Code Playgroud)
有没有办法像这样在 .NET Framework 中配置带有证书的客户端?我对 gRPC/.NET 还很陌生,非常感谢任何建议!
我正在 .NET Core 3.1 上运行 gRPC 服务,并尝试从 .NET Framework 4.7.2 客户端进行调用。我正在使用 protobuf-net 来重用现有的 WCF 数据契约。今天,当响应对象的字段之一不为空时,我注意到以下意外的客户端行为。
Grpc.Core.RpcException: 'Status(StatusCode="Internal", Detail="Failed to deserialize response message.")
下面是一个示例,说明了数据契约的一般结构 - 在本例中,Response<PersonData>是响应,PersonDataList是非空字段。
[DataContract]
public class Response<TValue>{
[DataMember(Order = 1)]
public TValue Value;
}
[DataContract]
public class PersonData : Data {
[DataMember(Order = 1)]
public IList<PersonDataItem> PersonDataList;
}
[DataContract]
public PersonDataItem {
[DataMember(Order = 1)]
public PersonDataType Type {get; private set;}
[DataMember(Order = 2)]
public DateTime? …Run Code Online (Sandbox Code Playgroud)