1

我正在通过 TCP 套接字侦听传入的 HL7 消息。出于调试目的,我使用工具7Edit将 HL7 消息发送到我的应用程序。

所以我要发送的是这个示例消息

MSH|^~\&|KISsystem|ZTM|NIDAklinikserver|HL7Connector|201902271130||ADT^A01|68371142|P|2.3
EVN|A01|201902271130|201902271130
PID|1||677789||Aubertinó^Letizia||19740731|F||
PV1|1|O|||||||||||||||||456456456
IN1|1||999567890|gematik Musterkasse1GKV||||||||||||Prof. Dr.Aubertinó^Letizia||19740731|||||||||||201902271101|||||||X110173919

我的TcpListener实例使用此代码侦听传入消息

    public async Task Listen()
    {
        try
        {
            while (true)
            {
                TcpClient tcpClient = await tcpListener.AcceptTcpClientAsync();
                
                // fetch message stream
                NetworkStream tcpClientStream = tcpClient.GetStream();
                
                // create reader instance
                using StreamReader streamReader = new StreamReader(tcpClientStream);
                
                // read message stream at once
                string messageText = await streamReader.ReadToEndAsync();
                
                // create new HL7 message parser instance
                PipeParser pipeParser = new PipeParser();
                
                // parse that string to a HL7 message
                IMessage hl7Message = pipeParser.Parse(messageText);
            }
        }
        catch (Exception exception)
        {
            // ... error handling ...
        }
    }

不幸的是,HL7 解析器抛出以下异常

无法解析以 MSH|^~&|KISsystem|ZTM|NIDAklinikserver|HL7Connec 开头的消息

在此处输入图像描述

当向应用程序发送消息时,消息似乎被正确提取,因此messageText保存消息字符串也是如此。

我从Visual Studio的Locals选项卡中获取了值:

"\vMSH|^~\\&|KISsystem|ZTM|NIDAklinikserver|HL7Connector|201902271130||ADT^A01|68371142|P|2.3\rEVN|A01|201902271130|201902271130\rPID|1||677789||Aubertin�^Letizia||19740731|F||\rPV1|1|O|||||||||||||||||456456456\rIN1|1||999567890|gematik Musterkasse1GKV||||||||||||Prof. Dr.Aubertin�^Letizia||19740731|||||||||||201902271101|||||||X110173919\u001c\r"

检查时你可以看到这个

在此处输入图像描述

如您所见,该字符串中有一些无效字符。在检查窗口中,您可以在开头看到一个无效字符。并且字符串本身包含一些转义字符。我认为这就是pipeParser.Parse(messageText)引发异常的原因。

有人知道这里出了什么问题/如何解决吗?

提前致谢

4

1 回答 1

0

我很确定您已经解决了该特定问题。无论如何,我想猜测一下,你只需要 trim() 第一个和最后两个字节。这些字节包裹着有效载荷。您可以在这里获得一些信息: https ://www.hl7.org/documentcenter/public/wg/inm/mllp_transport_specification.PDF

public async Task Listen()
{
    try
    {
        while (true)
        {   
            ...

            // read message stream at once
            string messageText = await streamReader.ReadToEndAsync();
            
                   
            // create new HL7 message parser instance                
            PipeParser pipeParser = new PipeParser();
            
            // parse that string to a HL7 message
            IMessage hl7Message = pipeParser.Parse(messageText.Replace('\u001c', ' ').Trim());
        }
    }
    catch (Exception exception)
    {
        // ... error handling ...
    }
}
于 2021-08-17T20:12:57.140 回答