Двунаправленный поток Grpc не выдает исключение, если оно не реализованоC#

Место общения программистов C#
Ответить
Anonymous
 Двунаправленный поток Grpc не выдает исключение, если оно не реализовано

Сообщение Anonymous »

В новой версии grpc появилась новая служба с новым двунаправленным потоком. Проблема в том, что когда сервер работает со старым grpc, поток не выдает (надежно) исключение при записи данных на сервер с помощью WriteAsync. Только MoveNext выдает исключение RpcException. Но немного громоздко выполнять «SetConnection», когда при следующем перемещении НЕ выдается исключение, с помощью своего рода таймера.
Есть ли хороший способ узнать, можно ли установить двунаправленный поток?

Код: Выделить всё

try
{
using var streamingCall = someService.CallBidirectionalStream(cancellationToken: cancellationToken);

// does not throw an exception, when the interface is not implemented (sometimes it does)
// it only reliably throws rpc exception, when server not started.
await streamingCall.RequestStream.WriteAsync(mapper.Map(currentData), cancellationToken)
.ConfigureAwait(false);

// should only run when connected
using subscription = await SetConnection(streamingCall, cancellationToken)
.ConfigureAwait(false);

// only this throws exception, when not implemented.
while (await streamingCall.ResponseStream.MoveNext(cancellationToken)
.ConfigureAwait(false))
{
var response = streamingCall.ResponseStream.Current;

ProcessResponse(response);
}
}
catch (OperationCanceledException)
{
}
catch (RpcException ex)
{
}
catch (Exception ex)
{
}
Использование .net 8 и Grpc.AspNetCore 2.71

Подробнее здесь: https://stackoverflow.com/questions/798 ... mplemented
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»