Соединение WebSocket с Copilot и .netC#

Место общения программистов C#
Ответить
Anonymous
 Соединение WebSocket с Copilot и .net

Сообщение Anonymous »

У меня есть .net-код подключения через веб-сокет. Когда я тестирую это в эмуляторе, он работает идеально. Но когда я развертываю это в Azure и добавляю это как навык в copilot, когда я запускаю это, для первого сообщения должен быть инициирован веб-сокет, а из второго сообщения должны быть отправлены сообщения. Но во втором пилоте для первого сообщения, даже если оно инициирует веб-сокет, оно дает ответ по тайм-ауту. Отправка и получение сообщений происходит. Но я все равно получаю сообщение об ошибке тайм-аута.
Для контекста кода я поместил весь свой код в метод onmessageactivity в обработчике активности по умолчанию.

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

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());
}
}

What can i do to avoid the timeout error.
Я попробовал выполнить развертывание в Azure и столкнулся с проблемой тайм-аута. Поэтому я избегал развертывания и использовал URL-адрес ngrok для локального запуска и добавил это как навык во втором пилоте. Но проблема все та же.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ot-and-net
Ответить

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

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

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

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

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