【问题标题】:reduce response time from WCF service减少 WCF 服务的响应时间
【发布时间】: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


【解决方案1】:

要一次性发送大量数据,难道您不能在您的方法/Web 应用程序中构建分页功能吗?也可以看看 iis compression gzip。

【讨论】:

  • 谢谢 Laird Streak..我会看看分页
【解决方案2】:

我找不到您在自定义绑定中提到“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

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

希望这会有所帮助。

【讨论】:

  • 谢谢 Ujjwal。我基本上已经尝试过&lt;httpTransport maxReceivedMessageSize="65536000" transfermode="Streamed" maxBufferSize="65536000" /&gt; 这并没有减少响应时间。Wii 看看指定的链接
  • 发表你的结论以造福他人
  • 分块通道方法有帮助..谢谢 Ujjwal
猜你喜欢
  • 2013-08-31
  • 2016-03-20
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 2018-06-19
  • 2015-06-22
相关资源
最近更新 更多