Azure中继混合连接 - 如何发送同步请求/响应

时间:2018-04-23 11:13:56

标签: c# azure azure-servicebusrelay azure-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 个答案:

答案 0 :(得分:0)

了解更多有关天蓝色中继混合连接的信息,我现在明白了。

框架中没有任何同步请求/响应的概念,但如果您为每个请求使用新连接,并在侦听器中对同一连接做出响应,则可以确定响应是对于您发送的请求。

为每个请求生成一个新连接,然后确保将响应写入该连接。所以,看看微软的监听器示例代码,只要listener.AcceptConnectionAsync()触发relayConnection上的所有消息响应,就可以回到等待await listener.AcceptConnectionAsync();

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

     ProcessMessagesOnConnection(relayConnection, cts);
}