【发布时间】:2013-01-10 08:34:49
【问题描述】:
我的 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>
【问题讨论】:
-
你在使用流媒体吗?
-
我刚刚在配置文件中将传输模式设置为流式传输。但是响应时间没有太大差异
-
如果不想跨机通信,可以试试netNamedPipeBinding。如果您可以发布一些演示代码和您对响应时间的观察,那就很清楚了。
-
我的应用程序确实需要跨 m/c 通信。我已经使用了 sampleconfig 文件和返回 7MB 数据的方法 GetData()
标签: c# wcf web-services