【问题标题】:Difference between returning a Stream and writing to HTTP output stream返回 Stream 和写入 HTTP 输出流之间的区别
【发布时间】:2013-05-08 14:56:36
【问题描述】:

返回文件时有什么区别

public Stream getFile(string filename){
    Stream s = _getFileStream(filename);
    Response.AddHeader( "Content-Disposition", "attachment;filename=" + filename+ ";" );
    return s;
}

public void getFile(string filename){
    byte[] b = _getFileBytes(filename);
    Response.AddHeader( "Content-Disposition", "attachment;filename=" + filename+ ";"  );
    Response.BinaryWrite(b)
}

以及问题here中提供的方法。

我遇到的问题是,有时用户上传的图像的某些部分出现乱码。奇怪的是我无法在本地重现该问题 - 仅当应用程序位于 www 时。

我的想法是,也许由于我的资源是本地的,所以在流式传输数据时我不会看到问题,而且我将内容流式传输回客户端的方式不正确。那么返回文件的“正确”(或推荐)方式是什么?

【问题讨论】:

  • 第一个函数不写入和数据。第二个在 void 函数中返回未声明的变量 s
  • 糟糕,我没有校对。这两个功能都对我有用。我只想知道一个是否比另一个更好以及为什么。
  • 如果你将 WCF(我认为,基于问题中的标签)与普通的 ASP.NET 混合 - 你不应该这样做。要么使用完整的 ASP.NET(忘记 [ServiceContract] 和朋友),您可以在其中使用 Response 对象,或者使用完整的 WCF(返回 Stream,但使用 WebOperationContext.Current.OutgoingResponse.Headers 添加返回的标头。
  • 我正在通过 HttpContext.Current.Response 访问响应。我想走 WCF 路线并避免使用 ASP.net 的东西。

标签: c# wcf web-services file stream


【解决方案1】:

我通过两个更改解决了我的问题。

  1. 我接受了carlosfiguera所说的并将HttpContext.Current.Response.AddHeaders(...)更改为WebOperationContext.Current.OutgoingResponse.Add(...)
  2. 在我的 WebConfig 中,我找到了 binding 标记,我的服务将其 bindingCOnfiguration 设置为并将 transferMode 更改为“流式传输”

这两个更改让我的图像正确显示。

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 2020-10-07
    • 2020-01-06
    • 1970-01-01
    • 2013-06-27
    • 1970-01-01
    相关资源
    最近更新 更多