如何确保消息传递到 SOAP 终结点

本文关键字:SOAP 结点 消息传递 何确保 确保 | 更新日期: 2023-09-27 17:56:00

我在c# MVC项目中使用了一个臭名昭著的不可靠的SOAP Web服务。 我无法控制该服务。 它偶尔会长时间停止响应。 是否有一种简单的方法,从客户端,继续以设定的时间间隔重试发送消息,直到我收到来自服务的响应?

我已经查看了 MSMQ 和 ws-reliability ,但在我看来,这两个选项都需要对 Web 服务进行一些控制。 有什么可以帮助我从客户端做到这一点吗?

如何确保消息传递到 SOAP 终结点

正如您可能已经发现的那样,您的问题对许多人来说是一个巨大的问题。查找"幂等"和"网络服务"。幂等性不仅仅意味着能够确保请求/响应,而且搜索会给你很多好东西来阅读。

如果"长时间停止响应"意味着秒,而很少被调用,那么DarkWanderer展示了一个相当蛮力的解决方案来解决这样的问题。

但是,如果您有很多电话,睡眠可能会占用您的工作线程,因此您只需要依靠某种队列即可。

如果您的调用是非事务性和非关键的,您当然可以编写自己的排队机制。虽然这看起来很容易,但它可能仍然需要线程、复杂的回调、日志记录、主动错误处理等等。许多可怜的人报告说,一开始一个简单的解决方案变成了维护的噩梦。

现在我看到您的要求之一是它必须在应用程序池回收中幸存下来。然后我们属于最后一类关键(也许是事务性)队列。

为什么我会从一开始就推荐 MSMQ。它可以处理您的所有问题,并且 api 在 .net 中,现在非常好。是的,它会增加整个解决方案的复杂性,但这源于您的问题域。

while (true) {
    try {
        var response = webServiceClient.CallMethod();
        if (response.Successful())
            break;
        Sleep(retryInterval);
    } catch {}
}

这意味着,您只需要继续调用Web服务,不需要消息队列或其他东西。这能回答你的问题吗?