2010-03-08 5 views
4

WCF 웹 서비스에서 많은 양의 데이터를 가져 오려고합니다. 요청은 매우 적으며 응답 메시지는 매우 커집니다. 현재 웹 서비스는 할당 할 수있는 메모리 (~ 1.4GB)에 대한 IIS6의 제한 때문에 SystemOutOfMemory 예외를 던지고 있습니다.WCF 웹 서비스의 스트리밍 응답 모범 사례

일부 블로그에서 스트리밍을 구현하면 문제가 해결 될 것이라고 읽었습니다.

누구든지이 주제와 경험을 공유 할 수 있습니까? 저는 공유 할 수있는 샘플 클라이언트 측 & 서비스 쪽 코드 또는 권장 사항/모범 사례에 가장 관심이 있습니다. MemoryStream 대 FileStream? 반환 유형은 Stream, Message, Byte []입니까? 당신은 응답을 다시 스트리밍하려면 transferMode=streamedResponse을 사용 후,

MediumSizeResponseClass[] GetData(SmallSizeRequestClass request) 

답변

4

(일반적으로는 응답 배열의 요소의 큰 숫자, ~ 200K 요소를 반환합니다) :

내 작업은 다음과 같습니다 바인딩 구성에서. 이렇게하면 반환 된 응답 만 스트리밍됩니다.

스트리밍 함수의 반환 값은 Stream이어야합니다. 그런 다음 스트림에서 읽고 무엇을 할지라도 (저장, 분석 등) 할 수 있습니다.

그래서 기본적으로이 같은 서비스 계약 뭔가있을 것 : 클라이언트에서, 당신은 스트림에서 읽는 동안

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

서버에서를, 당신은 기본적으로 그냥 스트림에 씁니다.

WCF Streaming에 대한 MSDN 문서를 참조 했습니까?

+0

http://msdn.microsoft.com/en-us/library/ms789010.aspx 또한 위에 링크 된 페이지 하단에있는 예제를 참조하십시오. – Xiaofu

+0

Thansk Mark, 저는 스트리밍 구현의 기초에 대해 잘 알고 있습니다. 그것을 암시하는 다른 방법이 있다는 것을 알고 있습니다. 일부 개발자는 Message 클래스를 Stream 클래스가 아닌 반환 유형으로 사용합니다. 일부는 FileStream을 사용하고 다른 일부는 MemoryStream을 사용합니다. 저는 WCF에서 스트리밍을위한 다양한 구현에 대한 찬반 의견을 수집하려고합니다. – Damian

+0

@Damian : 좋습니다. 글쎄, 나는 직접 WCF에서 스트리밍에 대한 직접적인 경험을 많이하지는 못했지만, 나는 무엇이든 의미있는 스트림을 사용하라. 스트림, 스트림, 스트림이되어야합니다. 그러나 어떤 유형이 크게 관련이 없습니다. 이미 서버에 파일이 있다면 FileStream을 사용하십시오. 데이터베이스 테이블에서 BLOB를로드해야하는 경우 MemoryStream을 사용하십시오. 한 유형의 스트림을 다른 유형과 비교하여 사용할 때 중대한 문제는 인식하지 못합니다. 하지만 어쩌면 다른 누군가가 우리에게 더 많은 것을 가르쳐 줄 수 있습니다! –