#.net-core #grpc-c#
Вопрос:
Я работаю в чате .NET Core с использованием gRPC (двунаправленная потоковая передача). клиент на данный момент представляет собой консольное приложение (.net core 3.1, сервер-5.0). связь между клиентом и сервером работала нормально, и внезапно у меня начали возникать RpcExceptions. проблема в том, что выданные исключения имеют StatusCode=OK и никаких подробностей. вот пример кода (упрощенный)
Серверный поток RPC
if (!await requestStream.MoveNext())
return;
//Open Connection - set user stream to server's output
client.Stream = responseStream;
while(await requestStream.MoveNext())
{
var chatMessage = requestStream.Current;
chatMessage.Msg = $"{requestStream.Current.ClientName}: {requestStream.Current.Msg}";
foreach (var user in loggedClients)
{
user.Stream.WriteAsync(chatMessage);
}
}
Код клиента
using (var streaming = client.RPC_BroadcastChatMessage(metaData))
{
//Read stream and display on console
var readTask = Task.Run(async () =>
{
while (await streaming.ResponseStream.MoveNext())
{
Console.WriteLine($"{streaming.ResponseStream.Current.Msg}");
}
});
//Send first message (empty string) - for a welcome message
Console.WriteLine("Sending empty msg");
await streaming.RequestStream.WriteAsync(emptyMsg);
//Wait for messages from user and send to server
Console.WriteLine("Type message and press Enter to send...");
string line = Console.ReadLine();
while (!string.Equals(line, "exit", StringComparison.OrdinalIgnoreCase))
{
var stream = streaming.RequestStream;
var msg = new ChatMessage()
{
ClientId = clientId,
ClientName = $"User{userNumber}",
Msg = line,
RoomId = roomId
};
await stream.WriteAsync(msg);
line = Console.ReadLine();
}
}
Исключение
Grpc.Core.RpcException: Статус(Код состояния=»ОК», Подробности=»»)
как клиент, так и сервер работают локально. Я попытался погуглить исключение, но пока ничего не нашел (в любом случае, это не связано со статусом=ОК). у кого-нибудь есть какие-нибудь зацепки? Я был бы вам очень признателен.
Комментарии:
1. У меня та же проблема, сервер реализован на c , клиент находится в .NET 5. Соединение работает нормально большую часть времени, но через более длительный период времени . Ошибка записи в сетевом клиенте с тем же исключением. После исключения соединение, похоже, зависает, так как клиент больше не читает сообщений