首页 > 解决方案 > GRPC 非法标头值

问题描述

我试图找出我的应用程序中的一个错误,但我有点不知所措。
调用服务时,我的客户端在收到带有“非法标头值”断言错误的响应时出现故障。

我正在使用开放遥测并将跨度上下文添加到我的客户端上下文中,如他们的示例中所示。

// inject current context to grpc metadata
  auto current_ctx = opentelemetry::context::RuntimeContext::GetCurrent();
  GrpcClientCarrier carrier(context);
  auto prop = opentelemetry::context::propagation::GlobalTextMapPropagator::GetGlobalPropagator();
  prop->Inject(carrier, current_ctx);

跨度上下文已添加到我的所有服务中,但只有一个因此错误而失败。
我在那里没有什么不同。
看起来 span-id (00-8703a0beea6ff515a32967c40dfb41fb-49b3c2fe1ac932a9-01) 在元数据字节数组中。
如果我删除跨度上下文,它会起作用。

raise 0x00007ffff67b918b
abort 0x00007ffff6798859
grpc::CoreCodegen::assert_fail(char const*, char const*, int) 0x0000555555769737
grpc::internal::CallOpSet<grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpRecvInitialMetadata, grpc::internal::CallOpRecvMessage<google::protobuf::MessageLite>, grpc::internal::CallOpClientSendClose, grpc::internal::CallOpClientRecvStatus>::ContinueFillOpsAfterInterception() 0x0000555555dd5c3b
grpc::internal::CallOpSet<grpc::internal::CallOpSendInitialMetadata, grpc::internal::CallOpSendMessage, grpc::internal::CallOpRecvInitialMetadata, grpc::internal::CallOpRecvMessage<google::protobuf::MessageLite>, grpc::internal::CallOpClientSendClose, grpc::internal::CallOpClientRecvStatus>::FillOps(grpc::internal::Call*) 0x0000555555dd5971
grpc::Channel::PerformOpsOnCall(grpc::internal::CallOpSetInterface*, grpc::internal::Call*) 0x00005555557a2482
grpc::internal::Call::PerformOps(grpc::internal::CallOpSetInterface*) 0x00005555557847e7
grpc::internal::BlockingUnaryCallImpl<google::protobuf::MessageLite, google::protobuf::MessageLite>::BlockingUnaryCallImpl(grpc::ChannelInterface*, grpc::internal::RpcMethod const&, grpc::ClientContext*, google::protobuf::MessageLite const&, google::protobuf::MessageLite*) 0x0000555555dd124b
grpc::internal::BlockingUnaryCall<grpc::station::StationId, grpc::station::DefaultResponse, google::protobuf::MessageLite, google::protobuf::MessageLite> client_unary_call.h:45


E1014 11:47:58.117958972 2120287 call.cc:926]                validate_metadata: {"created":"@1634204878.117940102","description":"Illegal header value","file":"/builds/grpc/src/core/lib/surface/validate_metadata.cc","file_line":51,"offset":55,"raw_bytes":"30 30 2d 38 37 30 33 61 30 62 65 65 61 36 66 66 35 31 35 61 33 32 39 36 37 63 34 30 64 66 62 34 31 66 62 2d 34 39 62 33 63 32 66 65 31 61 63 39 33 32 61 39 2d 30 31 7f '00-8703a0beea6ff515a32967c40dfb41fb-49b3c2fe1ac932a9-01.'\u0000"}
E1014 11:47:58.117989343 2120287 call_op_set.h:980]          assertion failed: false

标签: c++grpcopen-telemetry

解决方案


推荐阅读