我正在编写C#Web API服务器应用程序,并将通过Mirth HTTP Sender目标向其发送JSON。这篇文章是关于如何处理错误条件。具体来说,我想要处理三种情况:
对于#1,最初我让它排队失败/总是,但似乎响应转换器从不运行排队的消息(至少,调试语句从未显示在日志中)。我已经关闭排队,并将其设置为每十秒重试一小时,这似乎给出了所需的行为。我在这里走在正确的轨道上,还是错过了什么?
对于#2和#3,返回任何HTTP 400或500错误会调用1小时的重试次数。我想要的是对500个错误应用1小时的重试,而不是400个错误。我在响应变换器中尝试了responseStatus = SENT
,但响应转换器仅在小时到期后运行一次,而不是每次重试都运行一次。
这似乎是一个常见的问题,但我找不到解决方案。你们其他人如何处理这个?
答案 0 :(得分:1)
你关闭了!
因此,默认情况下,响应转换器只有在有转换的响应有效负载时才会运行。对于连接问题,或者可能对于不包含有效负载的4xx / 5xx响应,响应转换器不会执行。
但,如果您设置了响应数据类型(从摘要 - >设置数据类型对话框,或从目标 - >编辑响应,消息模板选项卡)到Raw,那么响应变压器将一直执行。原因是Raw数据类型甚至认为空的有效负载是"可转换的"。
然后重新开始排队,并将响应数据类型设置为Raw。然后在响应转换器中,如果查看“参考”选项卡,则会出现HTTP发件人的类别:
您需要"响应状态行"," HTTP / 1.1 200 OK"包含响应代码的响应行。这是一个响应转换器脚本,强制4xx响应错误:
if (responseStatus == QUEUED) {
var statusLine = $('responseStatusLine');
if (statusLine) {
var parts = statusLine.split(' ');
if (parts.length >= 2) {
var responseCode = parseInt(parts[1], 10);
// Force 4xx responses to error
if (responseCode >= 400 && responseCode < 500) {
responseStatus = ERROR;
responseStatusMessage = statusLine;
}
}
}
}