2016-06-30 8 views
1

간단한 클라이언트 및 서버 구현에서 [Named-Pipe-Wrapper] 라이브러리 v1.4를 사용하는 방법에 대한 작업 예제가 필요합니다.Named-pipe-wrapper 라이브러리 작업 예제

Named-Pipe-Wrapper 라이브러리 v1.4를 사용하여 클라이언트와 서버간에 메시지를 보내고받는 데 문제가 있습니다. 클라이언트가 연결되었지만 클라이언트와 서버간에 전송 된 메시지가 제대로 전달되지 않습니다.

내가 뭘 잘못하고 있니?

이 라이브러리를 선택한 이유는 객체를 직렬화 및 직렬화 해제하지 않고도 클라이언트와 서버간에 강력한 유형의 객체를 전달하기가 쉬운 것처럼 보였기 때문입니다.

다음은 테스트 목적으로 함께 작성한 코드입니다. 나는이 작품 네이티브 데이터 형식을 사용하는 경우

class Program 
{ 
    static void Main(string[] args) 
    { 
     var server = new NamedPipeServer<Message>("MyPipe"); 
     server.ClientConnected += delegate (NamedPipeConnection<Message, Message> conn) 
     { 
      Console.WriteLine("Client {0} is now connected!", conn.Id); 
     }; 
     server.ClientMessage += 
      delegate (NamedPipeConnection<Message, Message> conn, Message message) 
     { 
      Console.WriteLine("Client {0} message received !", conn.Id); 
      Console.WriteLine("Client {0} says: {1}", conn.Id, message.Text); 
      conn.PushMessage(new Message() { Text = "HELLO from server" }); 
     }; 
     server.Start(); 

     var client = new NamedPipeClient<Message>("MyPipe"); 
     client.ServerMessage += 
      delegate (NamedPipeConnection<Message, Message> conn, Message message) 
     { 
      Console.WriteLine("Server says: {0}", message.Text); 
     }; 
     client.Start(); 
     //client.WaitForConnection(1000);    
     client.PushMessage(new Message() { Text = "HELLO from client" }); 

     Console.ReadLine(); 
    } 
} 

public class Message 
{ 
    public string Text { get; set; } 
} 

업데이트 , 나는 기본 유형과 간단한 클래스를 사용하지만 때 작동하지 않습니다.

업데이트 2 코드는 소리가 들었지만 Message 클래스에 [serializable] 특성을 추가해야합니다.

+1

** 디버깅 ** 코드를 사용해 보셨나요? –

+0

예, 클라이언트가 연결되었다는 알림 만받습니다. 메시지가 전달되지 않습니다. 이것과 다른 것을보고 있습니까? – TheLegendaryCopyCoder

+0

명명 된 파이프 서비스가 실행되고 있습니까? –

답변

1

메시지 클래스에는 [serializable] 속성이 필요합니다.

+0

이것은 트릭을 만들었습니다. – TheLegendaryCopyCoder