向客户发送消息并接收答案+对收到的答案采取行动

时间:2012-08-23 21:33:33

标签: c# wcf callback

问题: 服务器应该向客户端发送一个SerialPort命令(例如“S”),并从客户端接收端口.Readline,就像发送另一个命令(例如“r01”)一样。

示例:服务器发送“S”并从客户端收到“N”,因此服务器应发送另一个“S”。如果收到!=“N”,则发送“r01”,依此类推。

我可以向客户发送消息,但我无法收到答案并存储/使用它。

到目前为止我尝试了什么:

。)将收到的信息保存到serv.connectedClients [ID] .receive

服务器: 工人阶级:

 public void doSomething(Service serv, string ID)
    { 
       serv.SendMessageToClient(client_name, "S");   //send first message                     
        data = serv.connectedClients[ID].receive.ToString(); //the .receive is empty but should have the clients answer stored
       if(data != ""){
          serv.SendMessageToClient(client_name, "r01");  //send second message
          serv.connectedClients[ID].Information = serv.connectedClients[ID].receive.ToString();
          }
    }

在Service.cs中:

  public void getPortMsg(string msg)
    { 
        connectedClients[OperationContext.Current.Channel.SessionId].receive = msg;
    }

在客户端:

 void callback_OnMessageReceivedEvent(string message)
    {
      string portmsg = "";
      portmsg = rfid.send(message); //portmsg gets the port.readline info
       client.getPortMsg(portmsg); //send portmsg to server

    }

和rfid.send:

 public string send(string senden)
    {

        string data = "";
        port.WriteLine(senden);
        data = port.ReadLine();

            return data;
      }

订单:服务器向客户端发送消息。客户端接收消息并调用其中包含答案的服务方法。服务器应该使用这个答案,但在得到答案之前发送下一条消息。

希望有人知道答案。

1 个答案:

答案 0 :(得分:0)

我有一个答案。我不认为这是解决问题的最佳方法,但它有效:

服务器向客户端发送消息+方法的名称。

客户端使用该消息并写入服务器的答案+方法的名称。

服务器现在知道如何处理答案并调用正确的方法。

代码示例:

服务器:

public void methodA(){
   sendToClient("i want an answer",methodA);
}

客户端:

 public void callback_messageFromServer(string msg,string location){
     string answer = workWithMsg(msg);
     client.sendAnswer(answer,location);
 }

服务器:

public void sendAnswer(string msg, string location) {
      if(location == "methodA")
          methodB(msg);
 }

要调用相同的方法,我使用int count和switch(count)。 希望它可以帮助某人^^

祝你好运