2013-02-10 3 views
1

다른 응용 프로그램을 실행하는 서버 응용 프로그램이 있고 두 번째 응용 프로그램이 로그 파일 인 을 작성하고 서버가 WCF를 통해 클라이언트에 보내길 원합니다.WCF에서 쓰고있는 동안 파일 스트리밍

EXEC 앱이 업데이트하는 동안 클라이언트가 로그를 읽길 원합니다.

저는 스트림 (로그 파일)을 반환하는 작업 계약을 사용했습니다. 문제는 내가 처음 스트림을 보낼 때 로그가 여전히 비어 있습니다. 이고 클라이언트는 서버 EXEC가 작성하는 "업데이트"를 보지 못합니다.

 public void SaveLog() 
    { 
     Stream stream = ServerProxy.GetLog(); 
     StreamWriter writer = new StreamWriter("NEWLog.txt"); 
     writer.AutoFlush = true; 
     StreamReader reader = new StreamReader(stream); 
     char[] buf = new char[100]; 
     int count = 0; 
     while (count = reader.ReadBlock(buf, 0, 100) > 0) 
     { 
      writer.Write(buf, 0, count); 
     } 
     stream.Close(); 
     writer.Close(); 
    } 

:

public Stream GetLog() 
    { 
     Stream stream = new FileStream(@"Log.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
     return stream; 
    } 
서버에서 EXEC 단순히 "Log.txt의"파일 여기

에 쓰기

클라이언트 코드는 : 여기

는 서버 코드 REAL-TIME에서 클라이언트를 어떻게 업데이트 할 수 있습니까?

+0

어떻게 클라이언트의 로그 파일에서 읽고있는? 당신은 그것을 여는 방법을 보여줄뿐입니다. –

+0

나는 스트림 리더를 가지고있다. 그것은 클라이언트 코드로 작성된 것이다. – IsraelKo

+0

코드가 포함되어 있다면, 그 주석은 논리가 작동하지 않는 이유를 더 명확하게 설명하는 데 도움이되지 않을 것이다. –

답변

1

바인딩이 잘못되었다고 생각합니다. 당신이 예를 찾을 수 있습니다 transferMode="Streamed"

가 설정해야합니다 가능성의 몇 가지가 있습니다

http://msdn.microsoft.com/en-us/library/ms751463.aspx

+0

이 설정을 사용했지만 클라이언트 스트림이 서버 스트림의 변경 사항으로 업데이트되지 않았습니다. – IsraelKo

+0

@IsraelKo basicHttpBinding을 사용하려고합니다 – giammin

0

. 계약을 수정할 수 있습니까? netTcpBinding과 같은 세션 인식 바인딩을 사용할 수 있으면 콜백을 사용하여 새 로그 데이터를 게시하는 콜백 계약을 사용하도록 계약을 수정할 수 있습니다.

[ServiceContract] 
public interface ILogCallback 
{ 
    [OperationContract(IsOneWay = true)] 
    void NewLog(string logString); 
} 

[ServiceContract(CallbackContract = typeof(ILogCallback))] 
public interface ILog 
{ 
    /// Call this method to sign up for future log messages, 
    /// which will be sent to the callback NewLog. 
    [OperationContract] 
    void SignMeUpForLogs(); 
} 

어떤 종류의 바인딩을 사용할 수 있습니까? 세션이 유력한 대안입니까 아니면 PerCall을 사용해야합니까?

안부, 프레드릭

+0

NetTcpBinding을 사용하고 있으며 솔루션이 실제로 문제를 해결하지만 구현이 모든 구독자를 저장하기 위해 복잡한 작업을 종료하고 로그 파일의 변경 사항을 캐치하고 모든 가입자를 업데이트하십시오. 내 간단한 코드가 작동한다면 나는 행복 할 것이다. – IsraelKo