【问题标题】:Can WCF Service Return Zip stream?WCF 服务可以返回 Zip 流吗?
【发布时间】:2013-01-17 10:55:15
【问题描述】:

我不得不在 XML 文件中存储一些非常大的字符串。现在我想使用GZipStream 压缩字符串,然后稍后在客户端解压缩它们。 WCF 服务方法可以返回 zip 流作为返回类型吗?

有我的服务方法:

public Stream ZipResponse()
{
    byte[] byteArray = null;
    GZipStream compressionStream = null;
    try
    {
        var var_details = "XML String Here";
        byteArray = Encoding.UTF8.GetBytes(var_details);
        MemoryStream stream = new MemoryStream(byteArray);
        compressionStream = new GZipStream(stream, CompressionMode.Compress, true);
    }
    catch (Exception e)
    { }
    return compressionStream;
}

现在,当我从客户端调用 ZipResponse() 方法时,它会抛出:
mscorlib.dll 中发生“System.ServiceModel.CommunicationException”类型的未处理异常附加信息:接收 HTTP 时发生错误回复 XXX.XXX.XXX.XXX。这可能是由于服务端点绑定未使用 HTTP 协议。这也可能是由于服务器中止了 HTTP 请求上下文(可能是由于服务关闭)。有关详细信息,请参阅服务器日志。

【问题讨论】:

  • 你的问题真的很模糊。也许试着充实一下,展示你尝试过的东西以及你卡在哪里。您的问题的基本答案是肯定的。如果您需要更多细节,我们需要您在问题中提供更多细节。
  • 对不起,我的问题。我在 WCF 服务中有 12MB 的 xml 字符串,我必须以 zip 流的形式返回到客户端?
  • 您可以使用二进制流通过 WCF 发送任何内容
  • 我的代码是:-public Stream ZipResponse() { byte[] byteArray = null;内存流流 = null;尝试 { var var_details = "XML 字符串"; byteArray = Encoding.UTF8.GetBytes(var_details);流 = 新的 MemoryStream(byteArray); } catch (Exception e) { } 返回流;我能够从服务返回流,但我必须返回 zipstream? ——
  • @Sam 你的代码有什么具体问题吗?还是您的问题只是“可以做到吗?”

标签: c# wcf dotnetzip


【解决方案1】:

是的,WCF 服务方法可以将 Stream 返回给客户端。 您应该确保您的传输模式设置为“流式传输”;除此之外,它应该是直截了当的。

您可以在这里获得更多信息:WCF Streaming Tutorial

【讨论】:

  • 任何带有完整源代码示例的最终解决方案?对于 2 种情况:a)将 Stream 返回给客户端(从服务)。 b) 将 Stream 发送到服务(从客户端)
  • @Kiquenet 您是否尝试查看我链接的教程?
【解决方案2】:

是的,看看这篇关于 7Zip(LZMA) WCF 消息压缩的文章http://geekswithblogs.net/argot/archive/2009/10/27/wcf-message-compression---gzip-7zip.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 2016-06-17
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多