繁体   English   中英

如何发送 HL7 ACK 消息作为 TCP 响应?

[英]How to send HL7 ACK message as a TCP response?

我通过 TCP 连接接收 HL7 消息。 这些消息将始终属于 ADT 类型。 我正在使用 Kestrel 来侦听这些消息,并使用 NHAPI 包来处理它们。 我使用David Fowler 的 Kestrel 示例代码来设置 TCP 侦听器。 所以基于这个示例代码

internal class HL7Listener : ConnectionHandler
{
    public override async Task OnConnectedAsync(ConnectionContext connection)
    {
        try
        {
            // handle the incoming message
        }
        catch (Exception exception)
        {
            // handle exceptions
        }
        finally
        {
            ACK acknowledgement = new ACK(); // create an ACK message
            PipeParser pipeParser = new PipeParser();
            string ackMessage = pipeParser.Encode(acknowledgement); // produces => MSH|^~\&|||||||ACK|||2.3
            byte[] ackMessageBytes = Encoding.UTF8.GetBytes(ackMessage);
            
            await connection.Transport.Output.WriteAsync(ackMessageBytes); // send the ACK
        }
    }
}

我正在使用工具 7Edit 将 HL7 消息发送到我的应用程序。 存储库中的回声示例(上面的链接)工作正常。 回声示例代码产生这样的日志

在此处输入图片说明

但是在使用我的代码时出现此错误

在此处输入图片说明

所以我认为我没有正确转换 ACK 消息。 任何想法如何解决这一问题?

我怀疑您在发送 ACK 时没有实施MLLP (也称为 LLP)协议。 我知道,7Edit 希望实施 MLLP。 这样,当您向 7Edit(TCP/MLLP 客户端)发送 ACK 时,它会在您的传入数据中查找起始块。 它永远找不到它。 它只是考虑垃圾而丢弃您的整个消息并继续等待; 如您所见,这会导致超时。

也许你应该在 7Edit 中寻找一些设置来禁用 MLLP; 但这将是临时解决方案。 更好的是,您实现 MLLP 块。

Description                 HEX     ASCII   Symbol
Message starting character  0B      11      <VT>
Message ending characters   1C,0D   28,13   <FS>,<CR>

随着MLLP实现,你的消息(东西你写上插座)看起来应该象下面这样:

<VT>MSH|^~\\&|......|ACK|......<FS><CR>

注意<VT><CR><FS>是上面消息中的占位符。

您应该修改以下代码行:

byte[] ackMessageBytes = Encoding.UTF8.GetBytes(ackMessage);

如下:

ackMessage = ((char) 11).ToString() + ackMessage + ((char) 28).ToString() + ((char) 13).ToString();
byte[] ackMessageBytes = Encoding.UTF8.GetBytes(ackMessage);

有关更多详细信息,您可以参考这个答案。

ackMessage = ((char) 11).ToString() + ackMessage + ((char) 28).ToString() + ((char) 13).ToString(); byte[] ackMessageBytes = Encoding.UTF8.GetBytes(ackMessage);

如何在python代码中做到这一点?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM