0

私の WCF サービスは、約 7MB のデータを文字列形式でクライアントに返しています。

クライアントは応答を待つ必要があります。

WCF サービスからの応答時間を短縮する構成ファイルまたはその他の方法で変更する必要がある適切なバインディングは何ですか?

 public string GetData() //Without compression
    {
        return File.ReadAllText("SampleDB");
    }


    private string GetDataforCompression() //with compression
    {
       string data=File.ReadAllText("SampleDB");
       Compress(data);

    }

    public static string Compress(string ToCompress)
    {
        var bytes = Encoding.UTF8.GetBytes(ToCompress);

        using (var msi = new MemoryStream(bytes))
        using (var mso = new MemoryStream())
        {
            using (var gs = new DeflateStream(mso, CompressionMode.Compress))
            {

                CopyTo(msi, gs);
            }

            return Convert.ToBase64String(mso.ToArray());
        }
    }

    public static void CopyTo(Stream src, Stream dest)
    {
        byte[] bytes = new byte[4096];

        int cnt;

        while ((cnt = src.Read(bytes, 0, bytes.Length)) != 0)
        {
            dest.Write(bytes, 0, cnt);
        }
    }

データを圧縮形式で送信し、クライアント側で解凍しようとしましたが、応答時間に大きな変動はありませんでした.以下はクライアント側の構成ファイルです

 <customBinding>
        <binding name="httpbinarybinding" closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00">
          <binaryMessageEncoding>
            <readerQuotas maxDepth="4194304" maxStringContentLength="65536000" maxArrayLength="4194304" maxBytesPerRead="4194304" maxNameTableCharCount="4194304" />
          </binaryMessageEncoding>
          <httpTransport maxReceivedMessageSize="65536000"  maxBufferSize="65536000" />
        </binding>
      </customBinding>
4

2 に答える 2

1

一度に送信するにはかなりの量のデータです。メソッド/Web アプリケーションにページングを組み込むことはできませんか? また、iis圧縮gzipもご覧ください。

于 2013-01-10T08:55:33.337 に答える
0

カスタム バインディングで「transferMode」に言及している場所が見つかりませんでした

<binding name="TransferService"
   maxReceivedMessageSize="2147483647"
   maxBufferSize="2147483647" transferMode="Streamed" >

ストリーミングは、データをチャンクで渡すのに役立ちます。これは、ユーザーの応答を管理するのに役立ちます。または、少なくとも進行状況バーを表示するのに役立ちます。

詳細については、次のリンクを確認してください。

http://www.codeproject.com/Articles/166763/WCF-Streaming-Upload-Download-Files-Over-HTTP および http://msdn.microsoft.com/en-us/library/aa717050.aspx

@クライアント側でデータを処理するために、データ長を知る必要がある場合があります。メッセージ コントラクトを使用して公開できます。 http://social.msdn.microsoft.com/Forums/en/wcf/thread/472a7b38-f4fe-420e-85be-ae9c744a94a7

お役に立てれば。

于 2013-01-10T11:52:48.817 に答える