【问题标题】:WCF Webservice with an ASMX interface returning a Stream带有 ASMX 接口的 WCF Web 服务返回 Stream
【发布时间】:2013-05-07 03:37:38
【问题描述】:

我有一个用于跨系统、跨网络集成的 WCF 服务。该服务最初是使用 WCF SVC 接口创建的,但由于开发后出现的需求,我们需要向该服务添加一个 ASMX 接口。

现在,到目前为止,所有这些都运行良好。只是现在我们向 Web 服务添加了两个新方法,其中一个接受 System.IO.Stream 作为其参数之一,另一个返回 System.IO.Stream,我们遇到了问题。

WCF 接口可以很好地与这两个流一起工作。当客户端将 ASMX 接口作为 Web 参考引用时,它似乎在其自动生成的客户端代码中创建了一个抽象类:public abstract class Stream

有没有其他人尝试过这个?我试图弄清楚我的选择是什么。现在我想保持原样,如果我只缺少一个小组件。如果不是,我是否可以创建这些 Stream 方法的两个副本,一个采用 Stream,另一个采用字节数组,并添加属性以便 WCF 公开一个,而 ASMX 公开另一个?

【问题讨论】:

    标签: c# wcf stream asmx


    【解决方案1】:

    不,旧版 ASMX Web 服务不支持流式传输。这是 WCF 中用于大数据和流式传输的新功能。

    绕过此问题的基本方法是将您的流分成块并逐块发送。

    您可以使用 WSE 和 MTOM 实现类似的行为,但我不确定您是否会获得相同的结果。见here

    【讨论】:

    • 好的,我可以理解,但是看看 WCF 服务的要求,我实际上并没有使用流模式。我返回一个 Stream 对象,但不流式传输它。据我所知,它只是在途中变成了一个 base64 数组,然后在另一端又变成了一个 Stream。
    • 因此,在与我的客户协商后,要求我只提供一个包装函数,将 Stream 替换为 byte[]。文件大小限制为 50MB,而且它完全是一个内部系统,所以他们很乐意像这样传输大文件。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    相关资源
    最近更新 更多