問題タブ [pushstreamcontent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - asp.net 5/mvc 6 の PushStreamContent が機能しない
Web API プロジェクト (従来の web.config プロジェクト) を移行しようとしており、PushStreamContent を最新の asp.net 5 Web アプリ (project.json) に使用しています。
私の問題は、PushStreamContent を動作させることができないことです。
この api コントローラーを使用すると、結果はストリームではなく json 形式になります。
コントローラのアクションを変更してタスクを返し、クラス MyPushStreamResult で PushStreamContent をラップすると、次のようになります。
コントローラーアクションへのリクエストはストリームを返すようになりましたが、サーバー側で閉じる前にストリームがフラッシュされていないか、大量のデータが含まれています。データを PushStreamContent 出力ストリームにプッシュすると、各テキスト書き込み後にフラッシュしますが、フラッシュは response.Body ストリームにはないと思います。
何が恋しいですか?asp.net 5 構造のサンプルが見つかりません。
c# - PushStreamContent C# コードを VB.Net WebAPI 2 に変換中にエラーが発生しました
この C# コードを WebAPI 2 VB.Net プロジェクトに変換するのに苦労しています。
元の C# コードは次のとおりです。
これがVB.Netの翻訳です
2 つの問題が発生しています。
この行には、「Public Function WriteToStream...」の「パラメータ「context」に引数が指定されていません」があります。
Dim func As Func(Of Stream, HttpContent, TransportContext, Task) = imageStream.WriteToStream
アクセス可能な 'New' をこれらの引数で呼び出すことができないため、オーバーロードの解決に失敗しました
response.Content = New PushStreamContent(func)
私はこれを正しく翻訳していないと思いますが、私が達成しようとしていることの例を VB.Net で見つけるのに苦労しています。誰かが私が間違っていることを教えてもらえますか?
asp.net - PushStreamContent は、ストリームの終了を通知するために最後の長さゼロのチャンクを送信していません
Odata プロトコルを使用して WebAPI 経由でコンテンツを一括エクスポートする必要があります。PushStreamContent を使用して、結果をデータベースから直接ストリーミングしようとしています。ローカル IIS インスタンスでサービスを実行するとうまく動作しますが、これをサーバーにプッシュすると、データがストリーミングされ、最後の 2 キロバイトで一時停止して「ハング」します。
ファイルサイズを追跡することでそれを確認しました。ローカルで実行すると 9094KB のファイルが取得され、同じコードをサーバーにデプロイすると 9092KB になり、接続が開いたままになり、転送が停止します。クライアントを強制終了してファイルを見ると、ストリームであった json が書き込みの途中で切断されていることがわかります。さらに、IIS で開いている接続を調べて、接続がまだアクティブであることを確認できます。
とにかく、PushStreamContent がデータの送信を停止し、ストリームを閉じないように見えるのはなぜでしょうか? エラーが発生した場合、ストリームと接続は閉じられます。
これが私のクライアントコードです
アップデート
私は広範なテストを行ってきましたが、ストリームが閉じられない (したがって、最後のチャンクが送信されない) ことが起こっていると思います。上記のデータ反復を次のように変更することで、この結論に達しました。
私が見ているのは、600の「行」しか返らないということです。ここでも 2 KB が不足しているように見えました。次に、ループをに変更し、count <601
ストリーム全体が転送されましたが、ストリームは決して閉じません。私が考えているのは、内部バッファのサイズが 4K 前後 (出力された 0 ~ 600 の数字) であり、ストリームが閉じていないため、最後の数バイトが受信されないことです。それは理にかなっていますか?
とにかく、なぜストリームが閉じないのでしょうか? 最終的にそれを持っていますが、スローされたエラーは見られません。
アップデート
より多くの情報を明らかにしました。HTTP 1.1 仕様では、チャンク ストリームは長さ 0 のチャンクで終了する必要があると規定されています。少し掘り下げた後、それが起こっているはずであることがわかりましたが、何らかの理由でそうではありません。私のクライアントでは、Connection: Keep-Alive
ヘッダーを削除して置き換えましたConnection: Close
が、同じ問題がありますが、(テストアプリをシャットダウンして) 接続を強制的に閉じるとすぐに、最後の数バイトがディスクに書き込まれ、すべて問題ありません。これが、長さゼロのチャンクが送信されていないことを知る方法です。
だから今、質問はなりました。ストリームを閉じたときに最後の長さ 0 のチャンクが送信されないのはなぜですか? 私が読んだことから、呼び出しHttpContext.Current.ApplicationInstance.CompleteRequest();
はリクエストを強制的に終了させ、そのチャンクを書き出す必要があります。これを finally ブロックの最後の行として追加し、デバッガーを使用して実行中であることを確認しました。ただし、そのチャンクはまだ設定されていません。
これらはすべて、IIS でホストされている私の開発マシンでは機能しますが、Web サーバーでは機能しないことを覚えておいてください。
私のマシンはWindows 10を実行しており、asp.net 5がインストールされており、IIS7はすべてデフォルトです。
WebサーバーはWindowsサーバーです(バージョンはわかりません)IIS8を実行していますが、asp.net 4.5しかインストールされていません。私の最初の予感は、これが問題であるということでした.asp.netフレームワークのバージョンが異なりますが、確認したところ、プロジェクトはASP.NET 4.5のみを対象としています。私はまだサーバーを更新しようとしていますが、4.5 をターゲットにしているので、何の役にも立たないと思います。
connection-reset - net::ERR_CONNECTION_RESET PushStreamContent
PushStreamContent を使用してビデオをストリーミングしようとしていますが、ビデオの再生が開始されてから数秒後に、ブラウザから net::ERR_CONNECTION_RESET ( Error ) が表示されます。
フロントエンド : タグを使用して、動画ファイルの一部を含むバッファを送信するアクションを使用する webapi メソッドを呼び出します
私の問題を説明できることを願っています。
前もって感謝します。
c# - PushContentStream を使用して zipFile をプッシュすると、zip ファイルが保存されずに読み込まれる
私は ac# web api コントローラーを使用しています。ここで、私のコードはいくつかの単語ドキュメントを作成し、それらを zip ファイルに圧縮することになっています。Ionic.Zip を使用してファイルを圧縮し、入力パラメーターとして以下のコードに返します。コードはダウンロードするためにユーザーに zip ファイルをプッシュすることになっていますが、代わりにウィンドウに zip ファイルをロードしています。
次のコードを使用しています。
しかし、実行すると、ファイルの保存を求めるプロンプトが表示されるのではなく、zip ファイルがウィンドウに読み込まれます。
これを実行すると、次のようになります。
私が間違っていること、またはこれを修正する方法についてのアイデアはありますか?
とても有難い。