2016-06-30 8 views
1

単純なクライアントとサーバーの実装で[Named-Pipe-Wrapper]ライブラリーv1.4を使用する方法の実例が必要です。名前付きパイプラッパーライブラリーの作業例

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

Named Pipesサービスが実行されていますか? –

答えて

1

メッセージクラスには[serializable]属性が必要です。

+0

これはトリックでした。 – TheLegendaryCopyCoder

関連する問題