問題タブ [chunking]
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.
wcf - WCFチャンク/ストリーミング-クライアントに対して透過的にします
WCFサービスの開発中に、メソッドパラメーターとして大きなデータを転送するという問題に直面しました(転送/メッセージのオーバーヘッドを考慮せずに、生のサイズが4 Mbを超える)。
この問題の解決策はチャンクまたはストリーミングを使用することですが、私が見たすべてのサンプルは、クライアントが使用された方法を認識しており、データの一部を送受信するために利用可能なブロックサイズを使用していることを前提としています。次のような1つのメソッドだけを呼び出すことはできません
しかし、代わりに次のようにsmthを繰り返すラッパーメソッドを記述します
'SaveData'を呼び出すだけで、クライアントに対してどういうわけか透過的にすることができますか?
編集:小さな追加の質問、ただし別の質問に進む可能性がありますwcfストリーミングを使用する場合、ServiceContractのすべてのServiceOperationsは、「ストリーミングされたトランスポート全体で発生する操作は、最大で1つの入力または出力パラメーターを持つコントラクトを持つことができます」などの追加の制限を満たす必要があります?
サービスがメソッドの一部に対してのみストリーミングを必要とする場合、それを別のサービスコントラクトに移動する必要がありますか?それに対処する別の方法はありますか?
ありがとう
c# - Google APIver2を使用してチャック内のEMLデータをGoogleAppsMailに移行するにはどうすればよいですか?
EMLメールをGoogleAppsに移行しています。2.1MBと1.96MBの2つの添付ファイルを持つEMLファイルを移行しようとすると。
例外をスローしています:
「リクエストは中止されました:リクエストはキャンセルされました。」
私は以下のコードを使用しています:
データを送信することでこの問題を解決できると思いますが、このEMLデータをチャンクでGoogle Appsに送信するにはどうすればよいですか?
ありがとう
wcf - メッセージ セキュリティを備えた WCF で wsHttp を使用してデータ (シリアル化されたオブジェクト) の大きなペイロードを転送する
wsHttpを使用して WCF を使用して( NetDataContractSerializer経由で) 大量のシリアル化されたオブジェクト グラフを転送する必要がある場合があります。メッセージ セキュリティを使用しており、引き続き使用したいと考えています。このセットアップを使用して、シリアライズされたオブジェクト グラフを転送したいと思います。転送しようとすると、System.InsufficientMemoryException 型の例外が表示されるようになりました。
少し調査した結果、WCF では、デフォルトで、サービス呼び出しの結果が、シリアル化されたデータを含む単一のメッセージ内に含まれており、このデータは、メッセージ全体が完全に書き込まれるまでデフォルトでサーバーにバッファリングされるようです。したがって、メモリ例外は、サーバーがバッファがいっぱいであるために割り当てることができるメモリ リソースを使い果たしているという事実によって引き起こされています。私が遭遇した 2 つの主な推奨事項は、ストリーミングまたはチャンクを使用してこの問題を解決することですが、それが何を伴うのか、また現在のセットアップ (wsHttp/NetDataContractSerializer/Message Security) でどちらの解決策も可能かどうかは明確ではありません。これまでのところ、メッセージの暗号化と復号化は部分的なメッセージではなく、データのセット全体に対して機能する必要があるため、ストリーミング メッセージ セキュリティを使用しても機能しないことを理解しています。チャンクは可能かもしれませんが、私がリストした他の制約でどのように行われるかは明確ではありません。利用可能なソリューションとその実装方法について誰かがガイダンスを提供できれば、非常に感謝しています。
私の場合、通信の両側を所有および制御し、どちらの側にも転送されるデータに共有インターフェイス パターンを使用するため、他のクライアントとの相互運用性については特に心配していません。したがって、私は、wsHttp をメッセージ セキュリティと共に使用して、NetDataContractSerializer を使用してシリアル化されたオブジェクト グラフを転送するという制約の範囲内に収まるアイデアを受け入れており、既存のサービスと周囲のインフラストラクチャを大幅に変更する必要がないソリューションを好みます。
関連リソース:
- チャンキングチャンネル
- 方法: ストリーミングを有効にする
- WCF 経由の大きな添付ファイル
- カスタム メッセージ エンコーダー
- InsufficientMemoryException の別の発見
- 非二重チャンキング チャネルが必要
- WCF と遅延実行による大きなコンテンツのストリーミング
このデータに対して実行できるあらゆるタイプの圧縮にも興味がありますが、クライアントが gzip を自動的にサポートするように、.NET 4.0 に移行できるようになったら、トランスポート レベルでこれを行うのがおそらく最善のようです。これを正しく理解していればヘッダー。
更新 (2010-06-29):
バッファリングされたメッセージが大きすぎることが問題の原因であるという結論に達した方法に関するいくつかの歴史。もともと、テスト中に以下のCommunicationExceptionを見ました。
基になる接続が閉じられました: 接続が予期せず閉じられました。
最終的に、これを実行してさらにログを記録した後、指定されたメッセージで問題を引き起こしている基になるInsufficientMemoryException例外を見つけました。
268435456 バイトのマネージ メモリ バッファの割り当てに失敗しました。使用可能なメモリ量が少ない可能性があります。
これは、次の方法に由来します。
System.ServiceModel.Diagnostics.Utility.AllocateByteArray(Int32 サイズ)
つまり、失敗は配列の割り当てに起因します。シリアル化された同じデータをディスクに書き込むと、約 146MB を占めます。それを半分に減らすと、エラーが発生しなくなりますが、バッファを壊す特定のしきい値と、それがシステムに固有なのか、それともいいえ。
更新 (2010 年 12 月 6 日):
この時点で、次の説明を求めていると思います。私の理解では、デフォルトではメッセージセキュリティを備えたWCF wsHttpでは、応答がクライアントに送り返される前にメッセージ全体(通常は返されるデータセット全体)をサーバーにバッファリングする必要があり、問題が発生します。
可能な解決策:
- データ サイズの制約 - 送信バッファの最大容量を消費しないようにするために、なんらかの形式の圧縮、エンコード、またはメソッドのようなページングを使用して返される実際のデータの制限を使用します。
- ストリーミング - WCF を介してストリーミング方式で大量のデータを送信できますが、これらの手法ではすべてのデータをバッファリングする必要があるため、これは wsHttp または MessageSecurity と互換性がありません。
- Chunking Channel - データを個別のメッセージに分割できるようにしますが、現時点では、これがサービス コントラクトの設計に及ぼす制約と、メッセージ バインディングで wsHttp を引き続き使用できるかどうかはわかりません。
返すことができるデータを制限することは、ある程度までしか機能せず、ストリーミング オプションと同様に、これらのオプションでは、WCF サービス呼び出しの外部で多くの下位レベルの作業をコーディングする必要があります。したがって、私が知る必要があるのは、単一のデータ セットをサーバー上で個別のメッセージに分割し、クライアント上でつなぎ合わせることができるようにすることで、大きなメッセージの問題を回避できる可能性のあるチャンキング チャネルの実装があるかどうかということです。これにより、既存のサービス コントラクトのインターフェイス/形状を変更する必要がなくなり、メッセージ セキュリティと wsHttp を使用しながら、各サービス実装のクライアントとサーバーの部分からプロセスがほとんど隠されます。チャンキング チャネルで、ストリームを公開するためにサービス コントラクトを書き直す必要がある場合は、必要ありません。これがストリーミング ソリューションと実際にどのように異なっているかがわかります。誰かが私のためにこれらの質問に簡単に答えることができれば、賞金を授与し、それを答えとしてマークします.
clojure - 短絡させたいレイジー seq に対する Clojure のチャンク動作を回避するにはどうすればよいですか?
私は、遅延して減らしてテストしたい、長くて怠惰なシーケンスを持っています。2 つの連続する要素=
(または他の述語) が互いに一致しなくなったらすぐに、作成にコストがかかるリストの消費を停止したいと考えています。はい、これは のように聞こえますがtake-while
、さらに読んでください。
私は次のようにシンプルでエレガントなものを書きたいと思っていました (のようにevery?
動作するふりをしますreduce
):
しかし、それは怠惰に機能しないため、無限の seq にハングアップします。これがほぼ希望どおりに機能することを発見しました。
しかし、シーケンスのチャンクによって余分な不要な要素が作成され、テストされることに気付きました。少なくとも、これは次のコードで起こっていることだと思います。
take-while
、 を使用して、取得した要素の数を確認する回避策を見つけましたcount
が、それはかなり面倒です。
Rich Hickey に、 と を適切に組み合わせreduce
てevery?
短絡するよう丁寧に提案する必要がありますか? それとも、既に存在する明らかな方法を見逃しているのでしょうか?
編集:apply
2 人の親切な人が、遅延シーケンスでのチャンクを回避するためのソリューションを投稿しましたが、4 つのチャンク グループで消費しているように見える を実行するときにチャンクを回避するにはどうすればよいですか?
編集 #2: Stuart Sierra が指摘し、私が独自に発見したように、これは実際にはチャンクではありません。ふつうに演技をするだけなので、これをクローズと呼び、彼に答えを出します。興味のある人のために、問題のreduce'ing部分を行うために、別の回答に小さな関数を含めました。
wcf - 非二重 WCF チャンク用のライブラリまたはサンプルはありますか?
チャンクを使用して断続的な接続損失に対処し、ストリーミングを使用して必要な大きなタイムアウトを減らす、HTTPS 経由のファイル転送サービスを実装する方法を探しています。クライアントがファイアウォールの背後にある可能性があるため、MSDN のChunking Channelサンプルは適切ではありません。
Microsoft フォーラムでこれに関する古い議論がありますが、完全な回答ではなく、少なくとも私が実装するノウハウを持っているものではありません。
c# - メモリを使い果たすことなく Informix BLOB に追加
私は、informix データベースの BLOB に大量 (1GB 以上) のデータを挿入する ac# アプリを作成しています。
ただし、多くの場合、ファイルが大きすぎてプロセスがメモリ不足になります。これを軽減するために WCF Chunking Channel を実装しましたが、これらのチャンクをすべて格納するためにメモリを消費することなく、これらのチャンクを BLOB に配置する必要があります。
最初にすべてのチャンクをメモリにバッファリングする代わりに、これらのチャンクを BLOB に追加するにはどうすればよいでしょうか?
ティア!
wcf - WCFチャンキングは本番環境で使用する準備ができていますか?
WCFチャンキングのステータスを知っている人はいますか?実稼働用に適していますか?新しいWCFチャンキングチャネルを本番環境で使用した経験はありますか? http://msdn.microsoft.com/en-us/library/aa717050.aspx
サンプルをダウンロードしましたが、APIの準備ができていないようです。
WCFチャンクに代わる良い方法はありますか?
c# - 大きなファイルをアップロードするための最適なチャンクサイズを計算する方法
大きなファイルを処理するのに最適なチャンクサイズなどはありますか?数百メガバイトの範囲のファイルのアップロードを受け入れるために使用されるアップロードサービス(WCF)があります。
私は4KB、8KBから1MBのチャンクサイズで実験しました。チャンクサイズを大きくすると、パフォーマンスが向上します(処理が高速になります)が、メモリが犠牲になります。
だから、ファイルをアップロードするときに最適なチャンクサイズを見つける方法はありますか?そのような計算をどのように行うのでしょうか?最適なサイズを決定するのは、使用可能なメモリとクライアント、CPU、およびネットワーク帯域幅の組み合わせでしょうか?
乾杯
編集:おそらく、クライアントアプリがSilverlightになることを言及する必要があります。
wcf - WCF から ASP.NET へのコールバックは可能ですか?
別のボックスのIISでホストされているWebサービスと、別のボックスのWindowsサービスでホストされているWCFサービスがあります(N層アプローチ)。ここで、Web サービスは WCF サービスのクライアントです。ファイルをアップロードする要求は、IIS がホストする Web サービスに届きます。IIS がホストする Web サービスは、代わりに WCF サービスを呼び出し、実際のアップロードを行います。ここまでは順調ですね。アップロードが完了すると、WCF サービスがコールバックを実行します (コールバックを辞書に保存し、(InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple) を使用しました)。WCF サービスがコールバックを送信します。トレース ビューアーでは、ASP.NET がコールバックを受信したように見えますが、ブラウザー (これはエンド ユーザーです) のアップロード ページは完全にフリーズします。larsw による ChunkingChannel バインディングを使用しています。
まず第一に、John Saundars がこのリンクで述べたように、上記のシナリオを実装することはまったく可能ですか?
「OperationContext.Current.GetCallbackChannel」は実際に何をしますか?
助けてくれてありがとう。
php - PHP を使用してチャンク単位で配列を処理する
PHP スクリプトが接続してクエリを実行する DB から約 500 行を取得しています。返された行ごとに、表形式で表示します。スクリプトは Firefox で正常に動作し、最終的には IE でも動作しますが、すべてが適切に表示される前に、ユーザーは「このスクリプトの実行を停止してください」というプロンプトを 1 回か 2 回 (そして IE に続行するように指示します..) 表示されます。
これを回避するには、いくつかのデータをブラウザーに送り返す必要があります。これを行う最善の方法は、配列をチャンク/バッチで処理することだと思います。PHP にはarray_chunk関数がありますが、ここでそれを使用する方法を理解するのに苦労しています。
DB 行を取得するには、次を使用します。
...次に、それらを表に表示します。
array_chunk を使用して配列を処理する最良の方法は何ですか?たとえば、50 個のチャンクでしょうか?