이전 포스팅에서 Stream 오류가 있어 해결을 하였습니다.
2023.01.13 - [C#] - [C#/gRPC] 대용량 데이터 Stream 전달시 에러 - HTTP/2 INTERNAL_ERROR
그런데 이부분을 처리하려다 보니 추가하는 stream api 마다 옵션을 넣지않고 Interceptor 에서 WriteOptions 을 설정하면
모든 stream api에 적용할 수 있습니다.
아래처럼 StreamingServerHandler에서 context(ServerCallContext)의 WriteOptions을 WriteFlags.BufferHint 로 설정하면 됩니다.
using Grpc.Core;
using Grpc.Core.Interceptors;
namespace GrpcServer
{
public class ApiInterceptor : Interceptor
{
public override Task ServerStreamingServerHandler<TRequest, TResponse>(TRequest request, IServerStreamWriter<TResponse> responseStream, ServerCallContext context, ServerStreamingServerMethod<TRequest, TResponse> continuation)
{
// 옵션 설정 및 요청을 처리하기 전 로직
// WriteOptions 설정
context.WriteOptions = new WriteOptions(WriteFlags.BufferHint);
var response = base.ServerStreamingServerHandler(request, responseStream, context, continuation);
// 요청이 성공적으로 처리된 후 로직
return response;
}
}
}
Interceptor 에서 로그 처리 뿐만 아니라 통신 옵션도 설정이 가능하여 정말 편리합니다.
C# Reflection 을 이용해 특정 Property 들만 Select 하기 (0) | 2024.05.14 |
---|---|
C# grpc 에러 : "HttpRequestException: Unable to get subchannel from HttpRequestMessage." (0) | 2024.04.26 |
C# gRPC Interceptor 사용하기 (0) | 2024.04.25 |
C# gRPC Streaming 에러 HTTP/2 INTERNAL_ERROR (0) | 2024.04.25 |
C# gRPC Streaming (0) | 2024.04.25 |