减少WCF服务的响应时间
本文关键字:响应时间 服务 WCF 减少 | 更新日期: 2023-09-27 17:51:08
我的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>
这是相当多的数据发送下一行在同一时间你可以不建立在你的方法/web应用程序的分页?也可以看看iis压缩gzip。
我找不到您在自定义绑定中提到'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 - 420 - e - 85 -——ae9c744a94a7