サーバーに大きなファイル (64MB ~ 1GB) をアップロードする機能が必要なプロジェクトに WCF を使用することを検討しています。おそらくアップロードを再開する機能を使用して、WCFでこれをどのように処理しますか。
大規模なクライアント ベースを処理するために、WCF を介して JSON をテストしたいと考えました。これはファイルのアップロードにどのように影響しますか? JSON から実行できますか、それともアップロード部分を REST に切り替える必要がありますか?
サーバーに大きなファイル (64MB ~ 1GB) をアップロードする機能が必要なプロジェクトに WCF を使用することを検討しています。おそらくアップロードを再開する機能を使用して、WCFでこれをどのように処理しますか。
大規模なクライアント ベースを処理するために、WCF を介して JSON をテストしたいと考えました。これはファイルのアップロードにどのように影響しますか? JSON から実行できますか、それともアップロード部分を REST に切り替える必要がありますか?
大きなファイルをアップロードする場合は、間違いなくWCF Streaming Modeを調べる必要があります。
基本的に、バインディングの転送モードを変更できます。デフォルトでは、バッファリングされます。つまり、メッセージ全体が送信側でバッファリングされ、シリアル化されてから、全体として送信される必要があります。
ストリーミングでは、一方向ストリーミング (アップロードのみ、ダウンロードのみ) または双方向ストリーミングを定義できます。これは、バインディングの transferMode をStreamedRequest
、StreamedResponse
、または単に plainに設定することによって行われますStreamed
。
<bindings>
<basicHttpBinding>
<binding name="HttpStreaming"
maxReceivedMessageSize="2000000"
transferMode="StreamedRequest"/>
</basicHttpBinding>
</bindings>
次に、型のパラメーターを受け取るStream
(アップロードの場合)、または型の値を返すStream
(ダウンロードの場合) サービス コントラクトが必要です。
[ServiceContract]
public interface IFileUpload
{
[OperationContract]
bool UploadFile(Stream stream);
}
それはそれを行う必要があります!
大きなファイルのアップロード/ダウンロードには、TransferMode streamed と単一の Stream パラメータまたは Stream 応答 (必要に応じて) を指定して webHttpBinding を使用できますが、工夫する場合を除き、URL やヘッダーを介して要求メタデータを送信する必要があります。ストリーム上の独自のフレーミング。ただし、ブラウザはローカル ファイルへのランダム アクセスをサポートしておらず、通常のファイル アップロードは JSON ではなくフォーム ポストになるため、HTML 以外のカスタム クライアント (Silverlight、Flash など) を構築する必要があります。