2014-09-01 6 views
3

내 응용 프로그램이 NetworkStream과 StreamWriter를 열어 서비스에 HL7 메시지를 보냈습니다. 이 서비스는 HL7 메시지를 수신하고 항상 확인 응답을 보냅니다. 나는 다음과 같은 문제가 : HL7 - 메시지 (작동, 내가 그것을 테스트 한 후) 서비스에서 승인을 받기 위해 s StreamReader 사용하려고하지만 인수 예외 "데이터 스트림을 읽을 수 없습니다." 내 코드를 디버깅하고 연결이 StreamWriter의 using-block 뒤에 닫히고 따라서 StreamReader에 대해 읽을 내용이 없음을 알았습니다. 여기 NetworkStream의 연결이 자동으로 닫힙니다.

내 코드입니다 :

public static void SendMessage(string message, string ip, int port) 
    { 
     string acknowledge; 

     try 
     { 
      using (TcpClient client = new TcpClient(ip, port)) 
      { 
       using (NetworkStream networkStream = client.GetStream()) 
       { 
        using (StreamWriter clientStreamWriter = new StreamWriter(networkStream)) 
        { 
         clientStreamWriter.Write(message); 
        } 

        using (StreamReader clientStreamReader = new StreamReader(networkStream)) 
        { 
         acknowledge = clientStreamReader.ReadToEnd(); 
        } 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Connection Problems: " + ex.ToString()); 
     } 
    } 

어떻게 내가 클라이언트가 HL7-메시지를받은 후 다시 전송 승인을 읽을 수 있기 때문에, 폐쇄에서 연결을 중지 할 수 있습니다?

+1

가능한 중복 http://stackoverflow.com/questions/2666888/is-there-any-way-to-close-a -streamwriter-closing-its-basestream) –

+0

이것은 많은 도움이됩니다, 감사합니다! –

답변

4

해결 : 사용중인 블록 내부의 StreamWriter도 기본 스트림을 닫습니다.

해결책 : 스트림 작성자에게 연결을 유지하도록하십시오.

public StreamWriter(
    Stream stream, 
    Encoding encoding, 
    int bufferSize, 
    bool leaveOpen 
) 
[이 BaseStream의 닫지 않고 StreamWriter를을 닫으려면 어떤 방법이 있나요?] (의
+0

와우 덕분에 이것이 내 문제였습니다! –

+1

내 실수로 누군가 다른 사람을 피하게되어 기쁘다. –