c# - 尝试使用 protobuf-net grpc 进行 grpc 时,线型(字符串)无效
问题描述
我最近开始在我的 protobuf-net grpc 调用中收到以下错误:
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")'
我已经访问了该链接,但并没有真正找到与我正在从事的工作真正相关的任何内容。
所以,这个错误在不久前开始出现,当时我确实编写了一些自定义反射代码来通过 RuntimeTypeModel 动态地进行 protobuf-net 继承建模。
这是我的代码:
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);
}
所以,我现在有点好奇我可能会在哪里出错。我很想为这个案例提供更多细节,但我真的不知道该输入什么。
我确实检查了给定调用的所有相关对象是否都已正确注册,就是这种情况。
任何指向我应该在这里做什么的指针?
解决方案
推荐阅读
- javascript - 对函数数组执行的Javascript`reduce`如何实现函数组合?
- python - 如何通过多处理在 mysql db 中插入 csv 文件?
- c - 停止我的程序的功能问题
- amazon-web-services - Cognito 迁移流程不返回范围
- python - 没有名为 ev3dev2 的模块
- php - laravel 中的删除方法
- javascript - 循环遍历 JavaScript 对象并返回具有修改值的新对象
- javascript - 在多个数组中查找交集
- flutter - 如何隐藏/删除 Flutter 应用程序上的标题栏?
- ios - 表达式类型“@lvalue CGRect”在没有更多上下文的情况下是模棱两可的