我得到了以下例外:
Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer100未处理异常呈现组件:“DefaultProxyCache
1' 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。
这是我的服务合同:
[ServiceContract(Name = "Services.Customer")]
public interface ICustomerService
{
ValueTask<Customer> CreateCustomer(Customer customerDTO);
ValueTask<CustomerResultSet> GetCustomers();
}执行工作是:
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;
}
}至于数据区:
[DataContract]
public class CustomerResultSet
{
[DataMember(Order = 1)]
public IEnumerable<Customer> Customers { get; set; }
}和,
[DataContract]
public partial class Customer
{
[DataMember(Order = 1)]
public int CustomerId { get; set; }
[DataMember(Order = 2)]
public string CustomerName { get; set; }
}在返回服务中的客户列表之前,我意识到我需要一个类来对消息建模,以便使protobuf能够序列化,这就是为什么CustomerResultSet。尽管如此,它仍然不起作用。任何帮助都很感激
发布于 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)
发布于 2021-01-11 14:50:34
我也有类似的问题。
System.InvalidOperationException:获取客户端-助手'UnaryValueTaskAsync‘的错误(从:'System.Guid’到:'Test.DTO.OpResult'):无效的泛型参数
我在那个服务上的整个ServiceContract都停止工作了。这发生在我加入
ValueTask ChangeCompany(Guid companyGuid);
我把它换成了
ValueTask ChangeCompany(string companyGuid);
这又起作用了。这个错误有点混乱,因为我没有使用ChangeCompany,但就像前面说的那样,调用不起作用。
https://stackoverflow.com/questions/62732593
复制相似问题