2017-04-17 5 views
0

J'ai créé un client simple pour envoyer des messages au format HL7 à un serveur. Malheureusement, je n'ai pas accès au serveur pour voir comment les messages arrivent et ce qui est renvoyé. En ce moment mon message envoie mais quand j'attends un message de retour (ACK), il attend juste là.HL7 C# - Réception d'une réponse ACK du serveur

Tout conseil est grandement apprécié.

try { 
    using (var client = new TcpClient()) 
    { 
     client.Connect("10.25.60.8", 10000); 

     using (Stream stm = client.GetStream()) 
     { 
      byte[] ba = Encoding.ASCII.GetBytes(segment1 + segment2 + segment3 + segment4 + segment5); 
      Console.WriteLine("Transmitting....."); 

      stm.Write(ba, 0, ba.Length); 

      Console.WriteLine("MessageSend reading response"); 

      byte[] bb = new byte[1000]; 
      int k = stm.Read(bb, 0, 1000); 

      for (int i = 0; i < k; i++) 
       Console.WriteLine(Convert.ToChar(bb[i])); 

      client.Close(); 
     } 
    } 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e.StackTrace); 
} 

Voilà comment je crée les segments de message:

clnt p = new clnt(); 
patientAdmit r = new patientAdmit(); 

r.admitMessage = "MSH|^~\\&|MP|M1|MP|M2|201701011500||ADT^A01|HL7MSG00001|P|2.3|EVN|A01|201701011500||PID|||MRN222222||TEST^MICHAEL||19890101|M||C|1 MP STREET^^MARK^ON^L4C|GL|(416)123-1234|(647)123-1234|||||||NK1|1|TEST^BARBARA|WIFE||||||NK^NEXT OF KIN|PV1|1|I|20^201^01||||123456^TEST^DOC|||SUR||||ADM|A0|"; 

string vt = Convert.ToChar(11).ToString(); 
string cr = Convert.ToChar(13).ToString(); 
string fs = Convert.ToChar(28).ToString(); 

int startSegment2 = p.GetNthIndex(r.admitMessage, Convert.ToChar("|"), 12) + 1; 

int startSegment3 = p.GetNthIndex(r.admitMessage, Convert.ToChar("|"), 16) + 1; 
int startSegment4 = p.GetNthIndex(r.admitMessage, Convert.ToChar("|"), 16 + 21) + 1; 

int startSegment5 = p.GetNthIndex(r.admitMessage, Convert.ToChar("|"), 16 + 21 + 10) + 1; 

string segment1 = vt + r.admitMessage.Substring(0, startSegment2); 

string segment2 = cr + r.admitMessage.Substring(startSegment2, startSegment3 - startSegment2); 

string segment3 = cr + r.admitMessage.Substring(startSegment3, startSegment4 - startSegment3); 

string segment4 = cr + r.admitMessage.Substring(startSegment4, startSegment5 - startSegment4); 

string segment5 = cr + r.admitMessage.Substring(startSegment5, r.admitMessage.Length - startSegment5) + cr + fs; 
+0

Le message que vous envoyez doit être enveloppé dans [l'enveloppe MLLP] (https://blog.interfaceware.com/common-hl7-transports/) – xmojmr

Répondre

1

Vous pouvez simuler un serveur avec la plupart des éditeurs de HL7. Par exemple, prenez l'essai gratuit de HL7 soup à partir de leur site Web, et créez un nouveau récepteur sur votre port désiré. Lorsque vous envoyez vos messages, ils répondent directement avec un message ACK généré à partir de votre message. Dans les paramètres de receveur, vous pouvez même forcer la réponse à être une erreur ou refuser ACK afin que vous puissiez tester votre client.