クライアントからサーバーにファイルをアップロードしています... サーバー プログラムがストリームを受信すると、プロパティ Length がサポートされておらず、CanSeek が false になります。シークはどのように可能でしょうか?? クライアントでそれを読み取り、メッセージ コントラクトのメッセージ ヘッダーとして送信すると長さを取得できますが、シーク方法がわかりません。アイデア??
2 に答える
1
WCF はファイル転送のテクノロジではありません。さらにStreamFormatter
、分散アプリケーションでのシークの考え方全体がナンセンスであるため、シークは内部で使用されていません。これを正しく機能させるには、内部ストリームは、転送されたデータの制御フローを備えたネットワーク プロトコルである必要がありますが、そうではありません。内部的には、ストリームはバイト配列のみです。これは、WCF がシークをサポートしていたとしても、シーク位置の前にすべてのデータを転送する必要があることを意味します。
再開機能が必要な場合は、手動でデータのチャンクを作成し、それらをアップロードしてサーバー上のファイルに追加することにより、自分で実装する必要があります。サーバーは最後に正しく受信されたチャンクを制御し、既に渡されたチャンクを拒否します。MSDN には、これをカスタム チャネルとして使用するサンプル実装があります。
于 2011-06-24T07:56:23.893 に答える
0
http://go.microsoft.com/fwlink/?LinkId=150780のストリーム サンプルは、あなたがしようとしていることを実行します。
WCF\Basic\Contract\Service\Stream\CS\Stream.sln
サンプルはここで説明されています
于 2011-06-23T22:33:19.020 に答える