减少WCF服务的响应时间

时间:2013-01-10 08:34:50

标签: c# wcf web-services

我的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);
        }
    }

我尝试以压缩格式发送数据并在客户端解压缩,但响应时间没有显着变化.Below是客户端配置文件

 <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>

2 个答案:

答案 0 :(得分:1)

在你的方法/网络应用程序中,你可以在同一时间发送大量数据吗?也许可以看看iis压缩gzip。

答案 1 :(得分:0)

我找不到你在Custom Binding中提到'transferMode'的地方

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

Streaming将帮助您以块的形式传递数据。 这将有助于您管理用户响应或至少有助于显示进度条。

请查看以下链接了解详情:

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

有时,处理@client端的数据可能需要知道数据长度。 您可以使用消息合约公开它。 http://social.msdn.microsoft.com/Forums/en/wcf/thread/472a7b38-f4fe-420e-85be-ae9c744a94a7

希望这有帮助。