3

我有一个需要调用的 WCF 服务,以便调用将触发 2-3 小时的处理。我正在使用 Windows C# 客户端应用程序来调用服务并将超时设置为所有最大值。当我将它部署到 Windows Azure 时,客户端触发的 WCF 进程似乎在某个时刻后停止。客户端没有得到超时异常。我可以使用 Azure Worker Role,但该过程只能使用 WCF 代码完成,因为它是一个复杂的操作。换句话说,我不能只安排对数据库执行简单编辑/插入操作的 Worker Role。所以我有点鸡和蛋的问题。后台进程需要 WCF 代码来执行后台操作,但 WCF 在 Azure 上似乎会在一段时间后停止。

4

2 回答 2

2

这是因为负载均衡器。超时时间过去是 60 秒,但几个月前增加到“超过 60 秒”(取决于并发连接)。无论如何,您需要保持连接处于活动状态以避免超时。

我建议您尝试在您的 WCF 客户端/服务中实现此功能:WCF Azure Net.TCP Keep Alive

为什么不重新考虑您的架构?与其依赖连接(无论出于何种原因都可以断开连接),为什么不简单地让您的客户端将消息放入队列中呢?您的工作人员角色从队列中提取消息,进行 2-3 小时的处理,完成后将消息放入另一个队列。最后,您的客户端轮询该其他队列,一旦消息到达那里,它就知道该过程已完成。

于 2012-09-13T14:29:50.393 回答
0

您可以将长时间运行的操作所需的代码放在单独的项目中。然后,您可以将此项目包含在您的 WCF 解决方案和您的 Worker Role 解决方案中。

然后后台进程将拥有完成操作所需的所有功能。

于 2012-09-13T14:05:51.123 回答