2

WCF を使用して FileService を実装しようとしています。ファイルコンテンツ自体とファイル名を提供することで、ファイルをアップロードできるはずです。現在の ServiceContract は次のようになります。

[ServiceContract]
public interface IFileService
{
    [OperationContract]
    [FaultContract(typeof(FaultException))]
    byte[] LoadFile(string relativeFileNamePath);

    [OperationContract]
    [FaultContract(typeof(FaultException))]
    void SaveFile(byte[] content, string relativeFileNamePath);
}

現時点では問題なく動作しますが、この Fileservice を使用してアプリケーションのネットワーク ペイロードを削減できるようにしたいと考えています。ユーザーがアプリケーションの特定のセクションを開くとすぐに多くのファイルを提供する必要がありますが、ユーザーがアプリケーションをさらにナビゲートするとすぐにそれらの一部をキャンセルできる場合があります。私のファイルの多くは 50 から 300 MB のどこかにあるため、ファイルの転送にはかなりの数秒かかります (アプリケーションは非常に遅いネットワークで実行される場合があり、1 分かかる場合があります)。

他のすべての WCF の質問との違いを明確にして概要を説明するには: 具体的な問題は、サービス自体のパフォーマンスではなく、クライアント <-> サーバー間でデータを提供することがボトルネックであることです。インターフェイスをストリーミングされた WCF サービスに変更することは合理的ですか?

4

1 に答える 1

0

ファイル サイズが一定量を超える場合は、ストリームを使用することをお勧めします。私たちが書いているエンタープライズ アプリケーションの作業では、16kb を超える場合はストリーミングします。それ未満の場合は、バッファリングします。当社のファイル サービスは、このロジックを処理するために特別に設計されています。

サービスの転送モードをバッファに設定すると、データを送信するときに、サービスだけでなくクライアントでもバッファリングされます。これは、300MB のファイルを送信する場合、通話が完了する前に両端で通話中に 300MB をすべてバッファリングすることを意味します。これは間違いなくボトルネックになります。パフォーマンス上の理由から、これは、すばやくバッファリングする小さなファイルがある場合にのみ行う必要があります。それ以外の場合は、ストリームが最善の方法です。

ファイルの大部分またはすべてがより大きなファイルである場合は、ストリームの使用に切り替えます。

于 2013-07-11T22:55:45.703 に答える