我收到此错误消息“不支持指定的方法。”当使用 protobuf-het.Grpc
我有这个客户
public class AddressClient
{
private IAddressService _grpcService;
public AddressClient(IAddressService grpcService)
{
_grpcService = grpcService;
}
public AddressClient() {
GrpcClientFactory.AllowUnencryptedHttp2 = true;
var http = GrpcChannel.ForAddress("https://localhost:7185");
_grpcService = http.CreateGrpcService<IAddressService>();
}
public async Task<ActionResultDTO<List<AddressModel>>> GetAddresses()
{
try
{
return await _grpcService.GetAsync(new AddressModel());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return null;
}
}
}
还有这项服务
public class AddressService : IAddressService
{
private readonly AddressStore _addressStore;
public AddressService(AddressStore addressStore) {
_addressStore = addressStore ?? throw new ArgumentNullException(nameof(addressStore));
}
public async ValueTask<ActionResultDTO<List<AddressModel>>> GetAsync(AddressModel addressModel)
{
try
{
var data = await _addressStore.GetAllAsync();
return new ActionResultDTO<List<AddressModel>> { Data = data, Message = $"Listed Addresses Sucessfuly", Success = true };
}
catch (Exception ex)
{
return new ActionResultDTO<List<AddressModel>> { Data = null, Message = ex.Message, Success = false };
}
}
}
[Service(name:"AddressService")]
public interface IAddressService : IBaseService<AddressModel, AddressFilterDTO>
{
}
public interface IBaseService<T, FilterType> where T : class
{
ValueTask<ActionResultDTO<T>> CreateAsync(T model);
ValueTask<ActionResultDTO<T>> UpdateAsync(T model);
ValueTask<ActionResultDTO<T>> DeleteAsync(T model);
ValueTask<ActionResultDTO<List<T>>> GetAsync(T model);
ValueTask<ActionResultDTO<T>> GetByIdAsync(int id);
ValueTask<ActionResultDTO<List<T>>> GetFilterAsync(FilterType filter);
}
我正在尝试使用 GRPC 客户端连接到该服务并收到该错误消息 地址模型也是从类名基本模型继承的,这两个模型看起来像这样。
[ProtoContract]
public class AddressModel : BaseModel
{
[ProtoMember(5)]
public string? District { get; set; }
[ProtoMember(6)]
public string? City { get; set; }
[ProtoMember(7)]
public string? State { get; set; }
[ProtoMember(8)]
public string? ZipCode { get; set; }
[ProtoMember(9)]
public string? Latitude { get; set; }
[ProtoMember(10)]
public string? Longitude { get; set; }
[ProtoMember(11)]
public string? Line1 { get; set; }
[ProtoMember(12)]
public string? line2 { get; set; }
}
[ProtoContract]
public abstract class BaseModel
{
[ProtoMember(1)]
public Int64 Id { get; set; }
[ProtoMember(2)]
public DateTime CreationDate { get; set; }
[ProtoMember(3)]
public DateTime LastUpdated { get; set; }
[ProtoMember(4)]
public int Status { get; set; }
}
这只是所提供代码的提示
这里是 gRpc 工作的完整示例 https://github.com/grpc/grpc-dotnet/tree/master/examples/Coder