Я пытаюсь изучить gRPC, создав простой сервер/клиент проекта, который клиент отправляет 2 Int Variable, и сервер будет обрабатываться строкой и переменной 2, которую клиент отправил. Код буфера протокола является:gRPC - Unary Call C#
syntax = "proto3";
option csharp_namespace = "MapPB";
service MapRoute {
rpc Gps(Location) returns (LocationName) {}
}
message Location {
int32 la = 1;
int32 lo = 2;
}
message LocationName {
string Name = 1;
}
Сервер
using Grpc.Core;
using static MapPB.MapRoute;
using MapPB;
namespace gServer
{
public class gS : MapRouteBase
{
public override async Task<LocationName> Gps(Location request, ServerCallContext context)
{
return await base.Gps(new LocationName { Name = "Your Location is " + request.La + ":" + request.Lo });
}
}
class Program
{
const int Port = 50051;
static void Main(string[] args)
{
Server server = new Server
{
Services = { MapRoute.BindService(new gS()) },
Ports = { new ServerPort("localhost", Port, ServerCredentials.Insecure) }
};
server.Start();
Console.WriteLine("Map server listening on port " + Port);
Console.WriteLine("Press any key to stop the server...");
Console.ReadKey();
server.ShutdownAsync().Wait();
}
}
}
Client
using Grpc.Core;
using Map;
using static MapPB.MapRoute;
namespace Map
{
class Program : MapRouteClient
{
static void Main(string[] args)
{
Channel channel = new Channel("127.0.0.1:50021", ChannelCredentials.Insecure);
var client = new MapRouteClient(channel);
int la = 1;
int lo = 2;
var reply = client.Gps(new MapPB.Location { La = la , Lo = lo });
Console.WriteLine(reply.Name);
channel.ShutdownAsync().Wait();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
}
}
Am получая красный загогулина в коде сервера под .Gps
Там не аргумент, учитывая, что соответствует требуемому формальному параметру «контекста» «MapRoute.MapRouteBase.Gps (Location, ServerCallContext)»
Я пытался добавить context
к параметру, но я получил другую ошибку
не может конвертировать из «MapPB.LocationName» до «» MapPB.Location
Может кто-нибудь объяснить, что не так, пожалуйста?
Попробуйте 'return new LocationName {Name =" Ваше местоположение "+ request.La +": "+ request.Lo};' Я предполагаю, что базовый класс является абстрактным, и вы не должны делегировать ему. – Matthias247
Yup, который сработал, спасибо – Skoochapp
Хорошо - я преобразовал его в ответ – Matthias247