2016-10-13 9 views
0

サーバーにファイルをアップロードする方法を調べていて、基本的なバイト[]がそのトリックを行うことを理解していました。だから私はバイトを取る基本的なアップロードメソッドを実装し、ストリームを使用すると、すべてのバイトが送信されるまでそのバイト[]がファイルに追加されます。しかし、これには2つの問題があります。まず、非常に遅く、ハンドシェイク処理に時間がかかります。第二に、それ以上のバイト[]を送信すると、呼び出しごとに約1024バイトになります。大きなファイルの場合は長い時間がかかります。私はプログラマーにもっと良い方法が何であるか尋ねました。彼は「イットンフォンドラーを使用してストリームを作成する」と答えました。それは私には分かりませんでした。C#WCFファイルをアップロードしてIHttpHandler、Streamファイルを実装するサービス

大きなファイルまたは小さなファイルをサーバーにアップロードできるクライアント呼び出しごとにハンドシェイクを必要としないサーバーへの接続を作成するには、正しい方向に私を指摘できますか?私は、この質問にはコードがないことを理解しています。これは、ストリーム形式のアップロードを作成する場所がわからないためです。受け入れ可能な答えは、私自身のコードを作成するいくつかの方向で私を指摘することさえあります。私はthisを読んでおり、コード例がないために非常に混乱していました。

今私のセットアップでは、コンソールアプリケーション内でホストされているwcfサービスがあります。その後、このwcfサービスのアップロードメソッドを呼び出す別のコンソールアプリケーション。

答えて

0

ServiceContractでbyte []の代わりにStreamクラスを使用できます。

あなたのバインディングの設定をtransferMode = "Streaming"に設定する必要があります。

MSDNには多くの例があります。 https://msdn.microsoft.com/en-us/library/ms733742(v=vs.110).aspx

<system.serviceModel> 
… 
<bindings> 
    <basicHttpBinding> 
    <binding name="ExampleBinding" transferMode="Streaming"/> 
    </basicHttpBinding> 
</bindings> 
… 

+0

私はこれを試してみました。私のサーバーメソッドでは、ストリームオブジェクトとしてストリームを受け取るアップロードがあります。私のクライアント側では、ストリームを作成し、そのストリームをメソッド呼び出しに渡します。私はいつもリクエストエンティティが大きすぎます。私はこれを見て、バインディング設定に最大値を加えても、このエラーは常に発生します。私は1MBから1GBのどこにでもファイルをアップロードしようとしています。 –

+0

私のクライアント側のコードでは、ローカルファイルを扱うためにFileStreamクラスを使用しています。 Uploadと呼ばれるサンプルServerメソッドと、このプロセスを実行するクライアント側メソッドの例を見ることはできますか? –

関連する問題