KeiStory

728x90
반응형

C# gRPC Interceptor 에서 WriteOptions 옵션 변경하기

 

이전 포스팅에서 Stream 오류가 있어 해결을 하였습니다.

2023.01.13 - [C#] - [C#/gRPC] 대용량 데이터 Stream 전달시 에러 - HTTP/2 INTERNAL_ERROR

 

[C#/gRPC] 대용량 데이터 Stream 전달시 에러 - HTTP/2 INTERNAL_ERROR

대용량 데이터 전송시 Stream 에서 연결을 끊어버리는 오류가 발생되었습니다. status(statuscode="internal",detail="Error reading next message, IOException: The request was aborted. Http2StreamException:The HTTP/2 server reset the s

kjun.kr


그런데 이부분을 처리하려다 보니 추가하는 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 에서 로그 처리 뿐만 아니라 통신 옵션도 설정이 가능하여 정말 편리합니다.

 

728x90

공유하기

facebook twitter kakaoTalk kakaostory naver band