WCF 스트리밍에 문제가 있습니다.wcf basichttpbinding 프로세스 출력 스트림에 대한 스트리밍이 예상대로 작동하지 않습니다.
이- 서비스
WCF 서비스를 소비 (지금은 콘솔 응용 프로그램) Windows 서비스
WCF 서비스는 basicHttpBinding (transferMode = "streamed")을 사용하여 단일 종점을 제공합니다.
클라이언트 코드는 매우 간단합니다. RunProcess 메서드를 호출하고 스트림 결과가 스트림 끝 (ReadLine()이 null을 반환 할 때)까지 ReadLine()을 호출하는 StreamReader에 전달합니다. 각 ReadLine() 결과는 콘솔 (Console.WriteLine())에 전송됩니다.
이렇게 간단합니다 ... 그러나 클라이언트를 시작하면 콘솔이 예상대로 즉시 새로 고쳐지지 않습니다. 오랜 시간 동안 콘솔에 아무것도 표시되지 않기 때문에 프로세스를 끝내기 위해 어떤 이유로 기다리고 있습니다. 프로세스가 완료되면 즉시 출력을 모두 표시합니다.
다른 콘솔 프로젝트가 있습니다. WCF 서비스에 의존하지 않고 프로세스를 직접 실행하고 표준 출력 스트림을 얻은 다음 똑같은 알고리즘을 사용하여 콘솔에 스트림을 쓰고 문제가 없습니다. , 출력 스트림은 프로세스가 시작된 직후에 실시간으로 표시됩니다.
이 동작을 이해하지 못합니다. 어떤 도움이라도 대단히 감사하겠습니다!
감사합니다.
편집 : 일부 코드/config 실제로 도움이 될 수 있습니다. 바인딩
<basicHttpBinding>
<binding name="BasicHttpBindingStreamed" maxReceivedMessageSize="67108864" transferMode="Streamed"/>
</basicHttpBinding>
의
--- 구성 --- WCF 방법
public Stream RunProcess()
{
Process p = new Process();
p.StartInfo.CreateNoWindow = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "XXXXXX";
p.Start();
return p.StandardOutput.BaseStream;
}
--- 클라이언트 consummer
Stream cmdOutputStream = serviceClient.RunProcess();
string currentLine = null;
using (TextReader reader = new StreamReader(cmdOutputStream))
{
currentLine = reader.ReadLine();
while (currentLine != null)
{
Console.WriteLine(currentLine);
currentLine = reader.ReadLine();
}
}
아마도 일부 코드 및 구성 파일을 게시하면 도움이 될 수 있습니다. – Bernard