我在c#MVC项目中消耗了一个臭名昭着的不可靠的SOAP Web服务。我无法控制这项服务。偶尔会停止响应很长一段时间。是否有一种简单的方法,从客户端,以设定的间隔继续重试发送消息,直到我收到服务的响应?
我看过MSMQ和ws-reliability,但在我看来,这两个选项都需要对Web服务进行一些控制。有没有什么可以帮助我从客户端做到这一点?
答案 0 :(得分:3)
正如您可能已经想到的那样,对许多人来说,您的问题是一个巨大的问题。查找“idempotent”和“webservice”。幂等性不仅仅意味着能够确保请求/响应,而且搜索将为您提供大量有益的内容。
如果“长时间停止响应”意味着很少被召唤的秒数,DarkWanderer会针对这样的问题展示一个非常强力的解决方案。
但是如果你有很多电话,睡觉可能会耗尽你的工作线程,所以你只需要依赖某种队列。
如果您的呼叫是非事务性且非关键性的,您肯定可以编写自己的排队机制。虽然这看起来很简单,但它可能仍然需要线程,复杂的回调,日志记录,主动错误处理等等。许多可怜的灵魂已经报道说,从一个简单的解决方案开始,变成了一个维持噩梦。
现在我看到你的一个要求是它必须能够在应用程序池回收中存活下来。然后我们处于关键(也可能是交易)排队的最后一类。
为什么我会从一开始就推荐MSMQ。它处理你所有的问题,api在.net,现在真的很好。是的,它会增加整体解决方案的复杂性,但这源于您的问题域。
答案 1 :(得分:1)
while (true) {
try {
var response = webServiceClient.CallMethod();
if (response.Successful())
break;
Sleep(retryInterval);
} catch {}
}
这意味着,您只需要继续调用Web服务,不需要任何消息队列或其他内容。这会回答你的问题吗?