16

サーバーに大きなファイル (64MB ~ 1GB) をアップロードする機能が必要なプロジェクトに WCF を使用することを検討しています。おそらくアップロードを再開する機能を使用して、WCFでこれをどのように処理しますか。

大規模なクライアント ベースを処理するために、WCF を介して JSON をテストしたいと考えました。これはファイルのアップロードにどのように影響しますか? JSON から実行できますか、それともアップロード部分を REST に切り替える必要がありますか?

4

3 に答える 3

19

大きなファイルをアップロードする場合は、間違いなくWCF Streaming Modeを調べる必要があります。

基本的に、バインディングの転送モードを変更できます。デフォルトでは、バッファリングされます。つまり、メッセージ全体が送信側でバッファリングされ、シリアル化されてから、全体として送信される必要があります。

ストリーミングでは、一方向ストリーミング (アップロードのみ、ダウンロードのみ) または双方向ストリーミングを定義できます。これは、バインディングの transferMode をStreamedRequestStreamedResponse、または単に plainに設定することによって行われますStreamed

<bindings>
   <basicHttpBinding>
      <binding name="HttpStreaming" 
               maxReceivedMessageSize="2000000"
               transferMode="StreamedRequest"/>
   </basicHttpBinding>
</bindings>

次に、型のパラメーターを受け取るStream(アップロードの場合)、または型の値を返すStream(ダウンロードの場合) サービス コントラクトが必要です。

[ServiceContract]
public interface IFileUpload
{
    [OperationContract]
    bool UploadFile(Stream stream);
}

それはそれを行う必要があります!

于 2009-12-20T09:44:22.650 に答える
0

大きなファイルのアップロード/ダウンロードには、TransferMode streamed と単一の Stream パラメータまたは Stream 応答 (必要に応じて) を指定して webHttpBinding を使用できますが、工夫する場合を除き、URL やヘッダーを介して要求メタデータを送信する必要があります。ストリーム上の独自のフレーミング。ただし、ブラウザはローカル ファイルへのランダム アクセスをサポートしておらず、通常のファイル アップロードは JSON ではなくフォーム ポストになるため、HTML 以外のカスタム クライアント (Silverlight、Flash など) を構築する必要があります。

于 2009-12-20T06:45:53.093 に答える