2

我需要从 WCF 服务器返回一个大字节数组。

问题是 - 为了返回这样一个数组 - 我需要创建一个 - 当创建这样一个数组时 - 它会自动进入大对象堆 - 这意味着当服务受到压力时 - 我遇到了一个真正的问题内存使用和管理。

我考虑过使用非托管内存来避免使用大型托管字节数组 - 但仍然 - 我如何从 WCF 服务返回这样的数组?

有什么方法可以从 WCF 服务返回字节“流”,但不包括实际创建托管字节数组?我知道 WCF 本身使用 BufferManager - 所以如果它只是读取我的非托管内存并在发送之前使用它的缓冲区管理来存储它 - 我希望不会有问题。

4

1 回答 1

2

您可以使用 WCF 的Streaming Mode。从该页面:

  1. 要流式传输数据,服务的 OperationContract 必须满足两个要求:

    一种。保存要流式传输的数据的参数必须是方法中的唯一参数。例如,如果输入消息是要流式传输的消息,则操作必须只有一个输入参数。类似地,如果要流式传输输出消息,则操作必须只有一个输出参数或返回值。

    湾。参数和返回值的至少一种类型必须是StreamMessageIXmlSerializable

  2. 必须在绑定上启用流式传输。您设置一个 TransferMode 属性,该属性可以采用以下值之一:

    一种。缓冲的,

    湾。流式传输,可实现双向流式通信。

    C。StreamedRequest,仅启用流式传输请求。

    d。StreamedResponse,仅启用流式传输响应。

该页面上也有一些不错的示例,包括如何写回自定义流(位于底部)。

有关编码、流式传输和会话的更多背景信息,以及使用流式传输时的一些安全注意事项,请参阅此 MSDN 页面

于 2012-11-20T15:43:59.913 回答