ファイルを WCF Web API エンドポイントにアップロードする方法はありますか? その場合、Network Stream にアクセスしてデータを読み取るにはどうすればよいですか?
どんな助けでも大歓迎です。
ありがとう。
ファイルを WCF Web API エンドポイントにアップロードする方法はありますか? その場合、Network Stream にアクセスしてデータを読み取るにはどうすればよいですか?
どんな助けでも大歓迎です。
ありがとう。
クライアント側で話していると仮定します。
これを行う1つの方法は、HttpContentから派生するFileContentクラスを作成することです。オーバーライドでは、HTTPClientがストリームを受信する準備ができると、NetworkStreamが提供されます。
サーバー側について質問している場合は、HTTPRequestMessageを取得して、httpRequestMessage.Content.ContentReadStreamプロパティにアクセスするだけです。
アップデート
デフォルトでは、WCFトランスポートは65Kでのメッセージの送信に制限されています。より大きく送信する場合は、「ストリーミング転送モード」を有効にする必要があります。また、MaxReceivedMessageSizeのサイズを大きくする必要があります。これは、大量のファイルをアップロードして誰かがサーバーを強制終了するのを防ぐためのガードとして機能します。
したがって、バインディング構成を使用してこれを行うことも、コードで行うこともできます。コードでそれを行う1つの方法は次のとおりです。
var endpoint = ((HttpEndpoint)host.Description.Endpoints[0]); //Assuming one endpoint
endpoint.TransferMode = TransferMode.Streamed;
endpoint.MaxReceivedMessageSize = 1024 * 1024 * 10; // Allow files up to 10MB
この回答は、Web API プレビュー 6 でいくつかの詳細を追加することのみを目的として設計されています。
TransferMode
およびMaxRecievedMessageSize
によって新たに公開されますWebApiConfigurationClass
。
var builder = new WebApiConfiguration();
builder.TransferMode = TransferMode.Streamed;
builder.MaxReceivedMessageSize = 1024 * 1024 * 10;
var serviceRoute = new WebApiRoute(route, new WebAPIServiceHostFactory() { Configuration = builder }, typeof(MyService));
それはいいですね!