【问题标题】:WCF dealing with large files, with WS-I interoperabilityWCF 处理大文件,具有 WS-I 互操作性
【发布时间】:2011-04-04 20:43:01
【问题描述】:

stackoverflow 上有很多关于 WCF 和大文件的帖子,但一般建议使用流式传输。这似乎不是一个非常可互操作的解决方案。

如何在 WCF 中处理大文件并仍然保持互操作性?

【问题讨论】:

    标签: wcf ws-i


    【解决方案1】:

    老实说,流媒体之所以如此受欢迎,是因为它运行良好。 .net 处理 WS-I 样式请求的正常方式对于大文件来说是非常低效的。它并不意味着传输大文件,如果你真的尝试这样做,那么你会发现很难扩展到任何显着的流量。

    最好的答案是避免它。如果需要,请添加一个服务请求,该服务请求可以通过您的服务“设置”文件传输,然后使用 cookie 进行正常的 HTTP 请求以实际获取文件。

    如果您确实必须通过 WS-I 服务发送文件,那么您所能做的就是启用 MTOM,并希望您不会立即收到足够的请求来使服务器在处理那些非常大的 XML 消息时用尽 RAM。

    【讨论】:

    • 你能解释一下“最好的答案是避免它。如果你需要,添加一个可以在你的服务上“设置”文件传输的服务请求,然后使用一个普通的 HTTP 请求cookie 来实际获取文件。”另外,您有任何参考资料,以便我阅读吗?
    • 这是指如果您必须在文件传输之前做任何工作,您可以进行服务调用来完成这些工作并准备好一切,因此当客户端下次尝试进行文件传输时,文件已为他们“准备好”。如果您所做的只是发送大文件而没有太多额外的工作,那就没有必要了。我没有在上传大文件的内部项目中这样做。用户调用创建文件记录和条目的普通服务,并检查权限。如果获得批准,它会发回一个“令牌”值(当然是通过 SSL)。
    • (续)客户端然后使用令牌作为请求的一部分流式传输文件,因此服务器知道它是谁。必须这样做,因为 WCF 流不支持身份验证。我不知道你到底想做什么,所以你可能不必担心。 (我没有想到好的参考资料,抱歉。我不得不自己解决很多问题。:))
    • 简而言之,我得到一个 XML 有效负载,解析它以将数据提交给 RDBMS,根据发生的更新/插入更新 XML ID,然后使更新的 XML 可用于提取到另一个应用程序会将所有 XML 提交到另一个 RDBMS。这也很有可能需要由 Adob​​e Livecycle ESB 调用(基于 Jboss,但经过抽象使其更容易),因此我需要 WS-I。
    • 这很复杂。这些有效载荷有多大?除非它们绝对巨大,否则听起来会更麻烦,然后值得尝试做一些非标准的事情,所以你最好只是像普通请求一样对待它们。
    猜你喜欢
    • 1970-01-01
    • 2011-06-06
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多