public void OnError(ServerCallInterceptorContext context, Exception error) { if (context.ServerCallContext.UserState.TryGetValue(VisitMarker, out _)) { return; } context.ServerCallContext.UserState.Add(VisitMarker, string.Empty); var faultOrIgnore = _errorHandler.ProvideFaultOrIgnore(context, error); if (!faultOrIgnore.HasValue) { return; } var fault = faultOrIgnore.Value; var status = new Status(fault.StatusCode ?? StatusCode.Internal, fault.Message ?? error.Message); var metadata = fault.Trailers; if (fault.Detail != null) { if (metadata == null) { metadata = new Metadata(); } metadata.Add(CallContext.HeaderNameErrorDetail, _marshallerFactory.SerializeHeader(fault.Detail)); metadata.Add(CallContext.HeaderNameErrorDetailType, fault.Detail.GetType().GetShortAssemblyQualifiedName()); } throw new RpcException(status, metadata ?? Metadata.Empty, status.Detail); }
public void SerializeString() { var content = _factory.SerializeHeader("abc"); _factory.DeserializeHeader(typeof(string), content).ShouldBe("abc"); }