如何将 HTTP 响应直接流式传输到网络
本文关键字:传输 网络 HTTP 响应 | 更新日期: 2023-09-27 18:35:14
我正在使用WCF 4.0 + REST编写高吞吐量Web服务。Web 服务返回 XML 响应。我的操作方法的返回类型是 XDocument,WCF 负责返回 XML。但是,在内存中构建 XML 响应然后将其返回给调用方并不是很有效。
我正在尝试从 XmlDocument/XDocument 转向 XmlWriter。在控制台应用中,我可以轻松地将响应流式传输到文件,但 WCF 呢?我可以使用 WebOperationContext、HttpContext 流式传输响应,并返回流吗?
FileStream fs = new FileStream("New.xml", FileMode.Create, FileAccess.Write);
using (XmlWriter writer = XmlWriter.Create(fs))
{
FormatResponse(writer, myDate);
}
感谢您的帮助!
只有 TCP、IPC、WebHttpBinding 和 basicHttp 绑定支持流式传输。
您的合约定义
[OperationContract]
Stream GetXml();
您的服务方法实现
public Stream GetXml()
{
string filePath = "document.xml";
try
{
FileStream xmlFileStream = File.OpenRead(filePath);
return xmlFileStream;
}
catch (IOException ex)
{
// Exception handling logic
}
}
在服务器端更改绑定配置(在本例中为流响应)
<bindings>
<basicHttpBinding>
<binding name = "StreamedHTTP"
transferMode = "StreamedResponse"
/>
</basicHttpBinding>
</bindings>
这是传输模式枚举:
public enum TransferMode
{
Buffered, //default
Streamed,
StreamedRequest,
StreamedResponse
}
注意:
- 不要忘记在客户端为大型流设置 maxReceivedMessageSize = "some value"
使用- 流式处理时,不能使用消息级传输安全性。
- 当合约配置了 SessionMode.Required 时,不能使用流式处理。
- 使用 TCP 绑定进行流式传输时,您也无法启用可靠的 消息。
您可以组合 REST 和 WCF 流式处理。例如,看看这里。