WCF REST 웹 서비스를 제공하는 Windows 서비스 응용 프로그램을 작성했습니다. 그것이를 얻을 수 있도록 호출 클라이언트에 기본이되는 스트림은, 차단,() 반환AdapterStream은 WCF 서비스에서 제대로 플러시되지 않습니까?
public Stream Render(Stream input)
{
return new AdapterStream(output => DoActualWork(input, output));
}
을하지만 때 즉시 렌더링 :
[OperationContract]
[WebInvoke(
Method = "POST",
UriTemplate = "/render",
BodyStyle = WebMessageBodyStyle.Bare)]
Stream Render(Stream input);
과 같이 구현있어 다음과 같이 호출 서명은 HTTP 200 OK 및 0 바이트의 본문 데이터 그 직후에 DoActualWork() 내부의 중단 점이 발생합니다. 서버가 실제로 작업을 수행하고 다음 초 동안 AdapterStream으로 데이터를 덤프하지만 그때까지는 호출자의 연결이 끊어지고 오래 지났습니다.
왜 그런가? DoActualWork()가 실제로 호출 되었기 때문에 프레임 워크가 실제로 AdapterStream에서 데이터를 가져 오려고했으나 너무 늦었거나 무언가 보였을 것입니다.
그 밖의 것이 없다면 동일한 결과 (예 : 결과 스트림이 메서드 매개 변수가 아닌 반환 값이라는 사실을 회피)와 같은 다른 제안 사항이 있습니까? 예 : 거대한 결과를 MemoryStream 먼저 그걸 돌려 주겠다고? 그런데 기억을 많이 먹는 것을 제외하고는 매력처럼 작동합니다.
먼저 당신의 WebHttpBinding이라는이 된 transferMode 스트리밍되었는지 확인 :이 질문은 매우 오래된 경우에도