[英]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.