Но когда я развертываю это в Azure и добавляю это как навык во втором пилоте, когда я запускаю его, впервые сообщение, веб-сокет должен быть инициирован, а из второго сообщения должны быть отправлены сообщения. Но во втором пилоте для первого сообщения, даже если оно инициирует веб-сокет, я получаю ответ по тайм-ауту. Отправка и получение сообщений происходит. Но я все равно получаю ошибку тайм-аута.
Для контекста кода я поместил весь свой код в метод OnMessageActivity в DefaultActivityHandler:
Код: Выделить всё
private async Task StartWebSocketClientAsync(string thread, ClientWebSocket client, ITurnContext turnContext)
{
using (client)
{
try
{
string uri = "wss://echo.websocket.org/";
await client.ConnectAsync(new Uri(uri), CancellationToken.None);
OnWebSocketConnect(thread, "Connected to server");
_ = Task.Run(async () => await ReceiveMessagesAsync(client, turnContext));
while (client.State == WebSocketState.Open)
{
await Task.Delay(100);
}
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
private async Task ReceiveMessagesAsync(ClientWebSocket client, ITurnContext turnContext)
{
var buffer = new byte[1048576];
var messageBuilder = new StringBuilder();
try
{
while (client.State == WebSocketState.Open)
{
WebSocketReceiveResult result = await client.ReceiveAsync(new ArraySegment(buffer), CancellationToken.None);
//await turnContext.SendActivityAsync(" In Receiveasync " + result);
if (result.MessageType == WebSocketMessageType.Close)
{
try
{
await client.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
}
catch (WebSocketException wex)
{
Console.WriteLine($"WebSocket Close Error: {wex.Message}");
}
break;
}
else
{
messageBuilder.Append(Encoding.UTF8.GetString(buffer, 0, result.Count));
if (result.EndOfMessage)
{
string completeMessage = messageBuilder.ToString();
string mes = "Received the message" + completeMessage;
if (!string.IsNullOrEmpty(completeMessage))
{
turnContext.SendActivityAsync(completeMessage);
}
messageBuilder.Clear(); // Clear for the next message
}
}
}
}
catch (Exception ex)
{
await turnContext.SendActivityAsync(ex.ToString());
}
}
Я попробовал выполнить развертывание в Azure и столкнулся с проблемой тайм-аута. Поэтому я избегал развертывания и использовал URL-адрес ngrok для локального запуска и добавил это как навык во втором пилоте. Но проблема все та же.
Подробнее здесь: https://stackoverflow.com/questions/792 ... ot-and-net
Мобильная версия