12

私は WCF を使用しており、クライアントからサーバーに大きなファイルをアップロードしたいと考えています。私は調査し、http://msdn.microsoft.com/en-us/library/aa717050.aspx で概説されているチャンキング アプローチに従うことにしました

ただし、このアプローチ (ストリーミングと同様) では、コントラクトが限定されたメソッド シグネチャに制限されます。

[OperationContract(IsOneWay=true)]
[ChunkingBehavior(ChunkingAppliesTo.InMessage)]
void UploadStream(Stream stream);

このサンプルでは、​​固定パスからファイルをアップロードし、サーバー上の固定パスに保存するというかなり便利な例を使用しています。したがって、私の質問は、ファイル名、ファイルパスなどを指定するために追加のパラメーターを渡す方法です。

例えば。次のようなものが欲しいです:

[OperationContract(IsOneWay=true)]
[ChunkingBehavior(ChunkingAppliesTo.InMessage)]
void UploadStream(Stream stream, String filePath);

前もってありがとう、マーク。

4

4 に答える 4

13

この記事では、MessageHeader 属性を使用してヘッダーに渡されるようにする方法を説明します。したがって、パラメーターとしてカウントされません。したがって、ストリームやその他のメタ データを渡す代わりに、属性 MessageContract を持つクラスを作成し、すべてのメタ データを MessageHeader としてマークします。次に、ストリームを MessageBodyMember (記事では「MessageBody」と呼んでいます) としてマークします。UploadStream メソッドに、作成したばかりの MessageContract クラスの型である単一のパラメーターを取らせます。私はこれを成功させましたが、チャンキングと並行して行っていません。幸運を。

于 2008-12-18T20:26:26.107 に答える
3

サービスをセッションフルにし、コントラクトに IsInitiating プロパティを true に設定した初期化メソッドを含めることができます。何かのようなもの:

[OperationContract(IsInitiating = true)]
void InitializeUploadService(string filename);

[OperationContract(IsOneWay = true, IsInitiating = false)]
[ChunkingBehavior(ChunkingAppliesTo.InMessage)]
void UploadStream(Stream stream);

ストリーミング サービスで試したことはありませんが、基本的には、UploadStream の前に InitializeUploadService が常に呼び出されるように WCF を強制する必要があります。

詳細なドキュメントは、http: //msdn.microsoft.com/en-us/library/system.servicemodel.description.operationdescription.isinitiating.aspxにあります。

于 2008-11-27T12:48:28.923 に答える
1

MessageContractsを見て、それらの値をメッセージ ヘッダーとしてオブジェクトに追加します。これにより、ストリームとストリームに関連する値をメッセージ ヘッダーとして渡すことができます。

于 2011-03-15T19:27:51.940 に答える
0

クライアント側とサーバー側で maxItemsInObjectGraph を設定するとうまくいきました。

(クライアント側を忘れないでください。) http://social.msdn.microsoft.com/Forums/en/wcf/thread/0af69654-2d89-44f3-857a-583b57844ca5

于 2010-10-19T13:23:21.080 に答える