代码之家  ›  专栏  ›  技术社区  ›  funwithcoding

Silverlight 3:如何从ASP.NET网页检索大型(约50 MB)xml字符串?

  •  1
  • funwithcoding  · 技术社区  · 14 年前

    将xml字符串放在文件中并下载文件不是一种选择。(如果没有其他方法可以使用,这应该是我最后的选择)

    我在ASP.NET服务器上有以下方法,该服务器通过WCF服务向silverlight客户端公开。

    [OperationContract]
    public string GetXmlDataByRegion(string region)
    {
       //Fetch Xml string from database based on given region name     
    }
    

    不幸的是,这些xml字符串大约为50MB到100MB。Silverlight客户端需要检索这些大字符串,并将其存储在客户端计算机上用户通过saveFileDialog选择的路径上的文件中。

    我担心的是WCF服务将不允许如此大的消息。我如何解决这个问题?有什么想法吗?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Bobby    14 年前

    您可以做到这一点,您只需要增加MaxReceivedMessageSize、maxBufferSize、maxBufferPoolSize以及其他可能的参数—不断增加它们,直到成功为止。

    即使在Silverlight中,您也可以使用二进制消息编码(如果尚未使用)。这将导致比纯文本更小的消息。

    例如:

            <binding name="ObjectServicePortBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:30:00" sendTimeout="00:01:00" maxBufferSize="1048576" maxBufferPoolSize="5242880" maxReceivedMessageSize="52428800" transferMode="Buffered" useDefaultWebProxy="true">
          <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
            <message clientCredentialType="UserName" algorithmSuite="Default" />
          </security>
        </binding>
    

    编辑: 数据流可能是更合适的方法:

    • 流式传输:输入和输出消息均流式传输
    • StreamedRequest:将从客户端发送到服务器的消息流化
    • StreamedRespone:仅对从服务器返回到客户端的消息进行流式处理
    • 缓冲:这是缓冲所有数据并在一次突发中发送数据的默认设置

    http://msdn.microsoft.com/en-us/library/ms731913.aspx

        2
  •  2
  •   Luke Foust    14 年前

    您可以为此使用ASHX通用处理程序,并使用WebClient发出简单的http请求。虽然我不确定这是不是 首选 这样,它将作为一个解决方案。

        3
  •  1
  •   Vijay Patel    14 年前

    一个50MB的XML文件可能会下降到5MB(假设压缩率为90%),这会大大减少通信量和传输时间(不包括两端的压缩/解压缩时间)