2013-01-10 130 views
0

我的WCF服务正在向客户端返回约7MB的字符串格式的数据。减少WCF服务的响应时间

客户端必须等待响应。

什么合适的绑定,需要修改配置文件或任何其他方法,这将减少从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); 
     } 
    } 

我试图以压缩形式发送数据,并在客户端解压缩,但在响应time.Below有was'nt显著变化是客户端配置文件

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

你使用流媒体吗? – Ujjwal

+0

我刚刚在配置文件中将传输模式设置为流式传输。但响应时间没有太大差别 – user1965995

+0

如果您不想跨机器通信,则可以尝试netNamedPipeBinding。如果你可以发布一些演示代码和你对观察响应时间的观察,那就很清楚了。 – Ujjwal

回答

1

这是相当多的数据一次发送下线可以不在你的方法/ web应用程序中建立分页吗?也可以看看iis压缩gzip。

+0

谢谢莱尔德斯特朗..我会看看分页 – user1965995

0

我无法找到你所提到的在您的自定义“transferMode”绑定

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

流将帮助你传递大块数据。 这将有助于您管理用户的反应,或至少将有助于显示进度条。

请查看以下链接了解详细信息:

​​ 和 http://msdn.microsoft.com/en-us/library/aa717050.aspx

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

希望这会有所帮助。

+0

谢谢Ujjwal。我基本上已经尝试了'这并没有减少响应时间.Wii看看指定的链接 – user1965995

+0

发表您的结论以利于他人 – Ujjwal

+0

Chunking Channel方法有助于......感谢Ujjwal – user1965995