2017-12-26 4 views
0

私は、UWPからエクステンションに1MBを超えるデータを送信する必要があるEdgeのエクステンションを開発しています。エッジエクステンションネイティブメッセージング:UWPメッセージサイズの制限を処理する

私は1MB未満であることをデータをチャンクと返答に上記ループにおける第二の応答を送信するときにアプリサービスがキャンセルされ

private async void OnAppServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args) { 
    AppServiceDeferral messageDeferral = args.GetDeferral(); 

    // This is to be replaced with enumerator 
    for (int i = 0; i < number_of_chunks; i++) { 
     // construct reply identifying the chunk number and termination 
     await args.Request.SendResponseAsync(reply); 
    } 
    messageDeferral.Complete(); 

} 

下のようなものを複数回送信することを試みました。対応するリクエストがある場合にのみレスポンスを送信できるようです。誰かがこれを確認できますか?

要求なしで非同期にデータを送信する代替メカニズムがUWPにありますか。

私が考えることのできるもう1つの選択肢は、チャンクロジックをバックグラウンドに移動させ、それが正しいと感じないようにすることです。

FWIW、Chrome & Firefoxにこのような制限はなく、標準出力に非同期でメッセージを送信できます。

更新#1:ピーターは、私は同じエラー秒sendReplyための「方法は、予期しない時に呼ばれていた」を取得怖いです。私は以下を試して、これがあなたが意味していたことを願っています。

private async void OnAppServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args) { 

    // This is to be replaced with enumerator 
    for (int i = 0; i < number_of_chunks; i++) { 
     // construct reply identifying the chunk number and termination 
     AppServiceDeferral messageDeferral = args.GetDeferral(); 
     await args.Request.SendResponseAsync(reply); 
     messageDeferral.Complete(); 
    } 
} 

答えて

0

あなたはあなたの接続が最初のサスペンションコール(await)で取り壊さを避けるためにargs.GetDeferral()を呼び出す必要があります。作業が完了したら、延期の時点でComplete()に電話する必要があります。

関連する問題