首页 > 解决方案 > 尝试使用 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);
    }

所以,我现在有点好奇我可能会在哪里出错。我很想为这个案例提供更多细节,但我真的不知道该输入什么。

我确实检查了给定调用的所有相关对象是否都已正确注册,就是这种情况。

任何指向我应该在这里做什么的指针?

标签: c#protobuf-net

解决方案


推荐阅读