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

具有大型结果集的WCF方法-可视化跟踪传输进度

  •  2
  • keithwarren7  · 技术社区  · 15 年前

    我的客户是Silverlight 3,最终我希望能够绑定一个进度条;有什么想法吗?

    编辑:悬赏后,如果不是这样,则自动选择带有upvotes的答案作为正确答案。

    4 回复  |  直到 15 年前
        1
  •  6
  •   Shiraz Bhaiji    15 年前

    代码项目中有一个这样的示例,请参见:

    http://www.codeproject.com/KB/WCF/WCF_FileTransfer_Progress.aspx

        2
  •  1
  •   Jacob Adams    15 年前

    如果你有一个巨大的WCF呼叫,那么你只有两个状态,要么全有,要么全无。此外,WCF有一个最大事务大小,因此返回一个大数据集有超过此限制的风险。

    为了在我的项目中解决这些问题,我将一个大请求拆分为许多小请求。然后,我检查有多少响应与原始请求,以获得进度指示。

    编辑:添加了更好的解释。

        3
  •  0
  •   Timothy Lee Russell    15 年前

    这个 CodeProject article 使用Silverlight可能很棘手,因为Silverlight只能访问BasicHttpBinding——尽管看起来BasicHttpBinding有一个TransferMode=“Streamed”,所以可能是这样——我不知道。

    如果你能让它返回一个流,那似乎是最好的方法。

    尽管如此,我还是认为我会提出一种随机的“其他”方法。

    也许您可以将数据序列化为一个文件,并使用WebClient下载它。因此,基本上,您将拥有一个WS.GetData(),它将在服务器上保存一个文件并返回其文件名——然后Silverlight应用程序将使用WebClient下载它(它有一个DownloadProgressChanged事件)。

        4
  •  0
  •   Mike Blandford    15 年前

    编辑 当前位置我的回答是,您需要silverlight上载程序,但实际上看起来您需要silverlight下载程序。除了使用HTTP GET、二进制WCF或套接字之外,您可以执行我为上传程序建议的相同操作。

    我已经编写了一个带有进度条的Silverlight 2上传程序,并模仿了它 this

    如果您想使用WCF而不是HTTP POST,这可能会更好,因为Silverlight 3现在支持二进制消息编码:

    <<binding name=“MyBinaryBinding”maxBufferSize=“2147483647” maxReceivedMessageSize=“2147483647”> <httpTransport/> </定制绑定>

    policy file