C# 向客户发送消息并接收答复+;根据收到的答复采取行动

C# 向客户发送消息并接收答复+;根据收到的答复采取行动,c#,wcf,callback,C#,Wcf,Callback,问题是: 服务器应向客户端发送SerialPort命令(例如“S”),并从客户端接收port.Readline,就像发送另一个命令(例如“r01”)一样 示例:服务器从客户端发送“S”并接收“N”,因此服务器应发送另一个“S”。如果收到!=“N”然后发送“r01”等等 我可以向客户发送消息,但我无法接收答案并将其存储/使用 到目前为止,我尝试的是: 。将收到的信息保存到serv.ConnectedClient[ID]。接收 服务器: 工人阶级: public void doSomething(

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

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

我可以向客户发送消息,但我无法接收答案并将其存储/使用

到目前为止,我尝试的是:

。将收到的信息保存到serv.ConnectedClient[ID]。接收

服务器: 工人阶级:

 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;
      }
order:Server向客户机发送一条消息。客户机接收消息并调用一个包含答案的服务方法。服务器应该使用这个答案,但在得到答案之前会发送下一条消息


希望有人知道答案。

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

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

客户机处理消息并向服务器写入答案+方法的名称

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

代码示例:

服务器:

public void methodA(){
   sendToClient("i want an answer",methodA);
}
public void sendAnswer(string msg, string location) {
      if(location == "methodA")
          methodB(msg);
 }
客户:

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

public void methodA(){
   sendToClient("i want an answer",methodA);
}
public void sendAnswer(string msg, string location) {
      if(location == "methodA")
          methodB(msg);
 }
为了调用相同的方法,我使用int count和switch(count)。 希望它能帮助别人^^

致意