Собственный обмен сообщениями Edge — можно ли отправить больше ответов на один запрос?

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

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


person kibitzerCZ    schedule 03.04.2019    source источник
comment
Если вы проверите поток архитектуры Native Messaging в документации, то заметите, что по замыслу 1 запрос может иметь только 1 ответ. Таким образом, вы не можете отправить несколько ответов на один и тот же запрос. В этой ситуации вы можете попытаться изменить логику и попытаться сгенерировать свой ответ с максимальным ограничением, чтобы избежать указанной проблемы. Ссылка: docs.microsoft.com/en-us/ microsoft-edge/extensions/guides/   -  person Deepak-MSFT    schedule 04.04.2019