0

クライアントからサーバーにファイルをアップロードしています... サーバー プログラムがストリームを受信すると、プロパティ Length がサポートされておらず、CanSeek が false になります。シークはどのように可能でしょうか?? クライアントでそれを読み取り、メッセージ コントラクトのメッセージ ヘッダーとして送信すると長さを取得できますが、シーク方法がわかりません。アイデア??

4

2 に答える 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

サンプルはここで説明されています

http://msdn.microsoft.com/en-us/library/ms751463.aspx

于 2011-06-23T22:33:19.020 に答える