Используя встроенное расширение обмена сообщениями для Edge, можно ли отправить более одного ответа на один запрос?Помимо других функций, мое расширение предназначено для поддержки загрузки файлов, но мне нужно разобраться с собственным ограничением размера сообщений.В связи с этим я хотел бы отправить данные файла, разбитые на несколько частей:
private async void OnAppServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
{
AppServiceDeferral messageDeferral = args.GetDeferral();
try
{
this.currentConnectionIndex = Int32.Parse(sender.AppServiceName);
this.desktopBridgeConnection = desktopBridgeConnections[this.currentConnectionIndex];
// Send message to the desktopBridge component and wait for response
AppServiceResponse desktopBridgeResponse = await this.desktopBridgeConnection.SendMessageAsync(args.Request.Message);
// Response Message is a ValueSet with all parts of processed file
foreach (KeyValuePair<String, Object> chunk in desktopBridgeResponse.Message)
{
ValueSet vs = new ValueSet();
vs.Add(chunk.Key, chunk.Value);
await args.Request.SendResponseAsync(vs);
}
}
catch(Exception ex)
{
//The InvalidOperationException is thrown after second SendResponseAsync call
Utils.Log(ex.ToString());
}
finally
{
messageDeferral.Complete();
}
}
Часть расширения javascript готова к этому, поскольку мы успешно используем ее в Firefox и Chrome - она знает, когда онаполучает одно сообщение или чанк (на основе заголовка данных).Но проблема в том, что всякий раз, когда я звоню AppServiceRequest.SendResponseAsync()
, порт закрывается (автоматически?) После отправки ответа.Он должен быть закрыт какой-либо частью приложения UWP, поскольку закрытие порта частью JS зарегистрировано, и в консоли Edge такой записи нет.Попытка отправки другого чанка приводит к
System.InvalidOperationException: метод был вызван в неожиданное исключительное время
, который выбрасывается.
У меня естьПерейдите к подобному вопросу здесь, на SO, где ответ предлагает проверить работу с отсрочками, но после нескольких пересмотров кода мне кажется правильным (мой проект основан на образце MSFT).
Я также пытался установить "background": { persistent: true }
в manifest.json
, но, похоже, это никак не отразилось на этом.
Есть ли что-то еще, что я должен проверить / установить?Или это поведение не поддерживается?