Я недавно начал получать следующую ошибку в моих вызовах protobuf- net grp c:
Grpc.Core.RpcException: 'Status(StatusCode=Internal, Detail="Error starting gRPC call: Invalid wire-type (String); this usually means you have over-written a file without truncating or setting the length; see https://stackoverflow.com/q/2152978/23354")'
Я уже перешел по этой ссылке, но на самом деле не нашел ничего, что действительно имеет отношение к над чем я работаю.
Итак, эта ошибка некоторое время начала появляться go, когда я действительно написал некоторый пользовательский код отражения для динамического моделирования наследования protobuf- net через RuntimeTypeModel.
Вот мой код для этого:
private void InitializeBindingsForGrpcService([NotNull] Type grpcService)
{
foreach (var method in grpcService.GetMethods())
{
var involvedTypes = method.GetParameters().Select(x => x.ParameterType).ToList();
involvedTypes.Add(method.ReturnType);
var cleanTypes = involvedTypes.Where(x => !x.IsGenericType).ToList();
var taskCleanTypes = involvedTypes.Except(cleanTypes).Select(x => x.CheckAndGetTaskWrappedType());
cleanTypes.AddRange(taskCleanTypes);
var genericTypes = cleanTypes.Where(x =>x.IsGenericType);
foreach (var genericType in genericTypes)
{
RegisterBaseChain(genericType);
}
var nonGenerics = cleanTypes.Where(x => !x.IsGenericType);
foreach (var type in nonGenerics)
{
if (!type.Namespace.StartsWith("System"))
{
RuntimeTypeModel.Default.Add(type, true);
}
}
}
}
private void RegisterBaseChain([NotNull] Type type)
{
var baseType = type.BaseType;
if (baseType == null || baseType == typeof(object))
{
return;
}
var baseMetaData = RuntimeTypeModel.Default.Add(baseType);
baseMetaData.AddSubType(m_protoIndex, type);
m_protoIndex++;
RegisterBaseChain(baseType);
}
Итак, мне сейчас немного любопытно, где я могу ошибаться. Я хотел бы предоставить более подробную информацию для этого случая, но я просто не знаю, что вставить.
Я проверил, все ли соответствующие объекты для данного вызова зарегистрированы правильно, и это дело.
Есть какие-нибудь указатели на то, что я должен здесь делать?