Azure Relay Hybrid Connections - как отправить синхронный запрос / ответ

Я использую гибридные соединения для запроса данных от слушателя. Если я могу написать и прочитать соединение, как я могу узнать, что ответ, который я прочитал из соединения, совпадает с запросом, который я дал? Например:

private HybridConnectionClient _client = new HybridConnectionClient(***);

public override async Task<RelayResponse> SendAsync(RelayRequest request)
{
    var stream = await _client.CreateConnectionAsync();
    var writer = new StreamWriter(stream) { AutoFlush = true };
    var reader = new StreamReader(stream);

    var reqestSerialized = JsonConvert.SerializeObject(request);

    await writer.WriteLineAsync(reqestSerialized);

    string responseSerialized = await reader.ReadLineAsync();
    var response = JsonConvert.DeserializeObject<RelayResponse>(responseSerialized);

    return response;
}

Если прослушиватель на этом соединении одновременно читает и отвечает на многие запросы, то есть ли в любом случае информация о том, что следующий Readline(), который мы выполняем на стороне клиента для получения ответа, связан с запросом? Или это то, что нужно управлять?

1 ответ

Понимая немного больше о гибридных соединениях Azure Relay, я теперь понимаю это.

На самом деле не существует какой-либо концепции синхронного запроса / ответа в платформе, но если вы используете новое соединение для каждого запроса и отвечаете на это то же соединение в приемнике, вы можете быть уверены, что ответ предназначен для отправленного вами запроса.,

Создайте новое соединение для каждого запроса, затем убедитесь, что ответ записан в это соединение. Так что, глядя на пример кода слушателя Microsoft, всякий раз, когда listener.AcceptConnectionAsync() пожары делают все сообщения ответа на relayConnectionзатем вернитесь к ожиданию в await listener.AcceptConnectionAsync();

while (true)
{
     var relayConnection = await listener.AcceptConnectionAsync();
     if (relayConnection == null)
     {
         break;
     }

     ProcessMessagesOnConnection(relayConnection, cts);
}
Другие вопросы по тегам