我有一个WCF服务,需要调用,以便调用将触发2-3小时的处理。我正在使用windows C#客户端应用程序调用该服务,并已将超时设置为所有最大值。当我将其部署到Windows Azure时,由客户端触发的WCF进程似乎在某个时刻后停止。客户端不会得到超时异常。我可以使用Azure Worker角色,但该过程只能使用WCF代码完成,因为它是一个复杂的操作。换句话说,我不能只调度对数据库执行简单编辑/插入操作的Worker角色。所以我有个鸡和蛋的问题。后台进程需要WCF代码来执行后台操作,但在Azure上运行一段时间后,WCF似乎会停止。在WCF中执行长时间运行的调用的方法是什么,以及如何在Azure上执行需要使用托管的云服务WCF代码来执行长时间运行的调用?
发布于 2012-09-13 22:29:50
这是因为the load balancer。超时时间过去是60秒,但几个月前增加到了“超过60秒”(取决于并发连接)。无论如何,您需要保持连接处于活动状态,以避免超时。
我建议您尝试在WCF客户端/服务中实现这一点:WCF Azure Net.TCP Keep Alive
为什么不重新思考你的架构呢?与其依赖于连接(无论什么原因都可以断开连接),为什么不简单地让客户端在队列中删除一条消息?您的工作人员角色从队列中提取消息,执行2-3小时的处理,完成后将消息放入另一个队列中。最后,您的客户端会轮询另一个队列,一旦消息到达该队列,它就会知道该过程已经完成。
发布于 2012-09-13 22:05:51
您可以将长时间运行操作所需的代码放在单独的项目中。然后,您可以在您的WCF解决方案和工作者角色解决方案中包含此项目。
然后,后台进程将拥有完成操作所需的所有功能。
https://stackoverflow.com/questions/12407170
复制相似问题