首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用gRPC-Web和protobuf-net在工作服务中添加新方法时出现异常。

使用gRPC-Web和protobuf-net在工作服务中添加新方法时出现异常。
EN

Stack Overflow用户
提问于 2020-07-04 17:56:13
回答 2查看 1.3K关注 0票数 4

我得到了以下例外:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer100未处理异常呈现组件:“DefaultProxyCache1' threw an exception. System.TypeInitializationException: The type initializer for 'DefaultProxyCache1”的类型初始化程序抛出一个异常。-> System.ArgumentException:无效的泛型参数名称: typeArguments at (包装器托管到本地)typeArguments( System.Reflection.RuntimeMethodInfo.MakeGenericMethod (System.Type[] methodInstantiation) <0x342def8 + 0x000d6> in :0 at ProtoBuf.Grpc.Internal.ContractOperation.TryGetClientHelper () 0x0001b in //src/protobuf-net.Grpc/Internal/ContractOperation.cs:291 at ProtoBuf.Grpc.Internal.ProxyEmitter.EmitFactoryTService 0x00477 in //src/protobuf-net.Grpc/Internal/ProxyEmitter.cs:238 at ProtoBuf.Grpc.Internal.ProxyEmitter.CreateFactoryTService 0x0006d in //src/protobuf-net.Grpc/Internal/ProxyEmitter.cs:)123 at ProtoBuf.Grpc.Configuration.ClientFactory+DefaultProxyCache`1TService..cctor () 0x00000 in //src/protobuf-net.Grpc/Configuration/ClientFactory.cs:81

我的项目使用gRPC-Web、Blazor web程序集和protobuf-net。

这是我的服务合同:

代码语言:javascript
复制
[ServiceContract(Name = "Services.Customer")]
public interface ICustomerService
{       
    ValueTask<Customer> CreateCustomer(Customer customerDTO);

    ValueTask<CustomerResultSet> GetCustomers();
}

执行工作是:

代码语言:javascript
复制
public class CustomerService : ICustomerService
{
    private readonly CustomerUseCases customerLogic;

    public CustomerService(CustomerUseCases customerLogic)
    {
        this.customerLogic = customerLogic;
    }

    public async ValueTask<Customer> CreateCustomer(Customer customerDTO)
    {
        var result = await customerLogic.CreateCustomer(customerDTO);
      
        return customerDTO;
    }

    public async ValueTask<CustomerResultSet> GetCustomers()
    {
        CustomerResultSet result = new CustomerResultSet { Customers = await customerLogic.GetCustomer() };
        return result;
    }
}

至于数据区:

代码语言:javascript
复制
[DataContract]
public class CustomerResultSet
{
    [DataMember(Order = 1)]
    public IEnumerable<Customer> Customers { get; set; }
}

和,

代码语言:javascript
复制
[DataContract]
public partial class Customer
{   
    [DataMember(Order = 1)]        
    public int CustomerId { get; set; }
    [DataMember(Order = 2)]        
    public string CustomerName { get; set; }
}

在返回服务中的客户列表之前,我意识到我需要一个类来对消息建模,以便使protobuf能够序列化,这就是为什么CustomerResultSet。尽管如此,它仍然不起作用。任何帮助都很感激

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-07 07:38:33

那是..。很奇怪。我不能在这里复制,所以我猜这是布兹尔特有的东西。我已经检查了代码在“常规”框架中所做的事情,至少对我来说,它似乎做了正确的事情--使用UnaryValueTaskAsync<Customer, Customer>()UnaryValueTaskAsync<Empty, CustomerResultSet>(),这正是我所期望的。我改进了代码路径中的异常处理,至少给出了它试图做什么的线索,所以我的建议是:

  • 更新到protobuf-net.Grpc版本>= 1.0.119 ( CI完成后我会尽快部署它)
  • 再试一次,让我知道它现在说的是什么

或者,如果你有一个极小的复制,包括blazor的部分,比如说,一个GitHub回购,我可以高兴地在那里看看。

(提示:我试图同时关注堆栈溢出和GitHub,但是GitHub可能更适合于这类问题--我很高兴地说这是一个bug,所以:https://github.com/protobuf-net/protobuf-net.Grpc/issues)

票数 2
EN

Stack Overflow用户

发布于 2021-01-11 14:50:34

我也有类似的问题。

System.InvalidOperationException:获取客户端-助手'UnaryValueTaskAsync‘的错误(从:'System.Guid’到:'Test.DTO.OpResult'):无效的泛型参数

我在那个服务上的整个ServiceContract都停止工作了。这发生在我加入

ValueTask ChangeCompany(Guid companyGuid);

我把它换成了

ValueTask ChangeCompany(string companyGuid);

这又起作用了。这个错误有点混乱,因为我没有使用ChangeCompany,但就像前面说的那样,调用不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62732593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档