Пограничный собственный обмен сообщениями - можно ли отправить больше ответов на один запрос? - PullRequest
1 голос
/ 03 апреля 2019

Используя встроенное расширение обмена сообщениями для 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, но, похоже, это никак не отразилось на этом.

Есть ли что-то еще, что я должен проверить / установить?Или это поведение не поддерживается?

...