Best practices for streaming response of WCF webse

2020-07-18 03:56发布

I'm trying to pull a large amount of data out of a WCF web service. The request is fairly small and the response message will be very big. Currently the web service is throwing SystemOutOfMemory exceptions due a limitation on IIS6 for the memory it can allocated (~1.4GB).

I have read in some blogs that implementing streaming will solve my problem.

Can anybody share their experiences with this topic? I'm most interested in any sample client-side & service-side code that can be shared or any recommendations/best practices. MemoryStream vs FileStream? Return type should be Stream, Message, Byte[]?

My operation looks like the following: (typically it will return a big number of elements in the response array, ~200K elements)

MediumSizeResponseClass[] GetData(SmallSizeRequestClass request)

1条回答
该账号已被封号
2楼-- · 2020-07-18 04:38

If you want to stream back only the response, then use transferMode=streamedResponse in your binding configuration. This makes sure only the returned response will be streamed.

The return value of a streaming function must be a Stream. You can then read from that stream and do whatever you need to do with it (store it, analyse it, whatever).

So basically you'd have a service contract something like this:

[ServiceContract]
interface IYourService
{
    [OperationContract]
    Stream GetData(SmallSizeRequestClass request);
}

On the server, you basically just write to a stream, while on the client, you read from the stream.

Have you consulted the MSDN docs on WCF Streaming?

查看更多
登录 后发表回答