wcf - 更新 Azure 云服务的单个实例

标签 wcf azure azure-cloud-services

我有一个托管在 Azure 中的云服务。由于它使用的数据量很大,我们有一个每小时的进程告诉服务将数据缓存到内存中。为了更新缓存,我们使用一个名为“RefreshData”的公开方法,我们在本地服务器上的计划任务上调用该方法。

最近我更新了云服务,使其在 2 个实例上运行(这意味着它原来在 1 个虚拟机上运行,​​现在在 2 个虚拟机上运行)。

我现在注意到的是,我们的数据不再自动刷新为最新数据。这里发生的事情似乎是:

  1. 在本地服务器上整点触发运行命令可执行文件的计划任务
  2. exe 调用 http://myCloudService.cloudapp.net/service.svc ,获取响应,并启动 RefreshData 方法
  3. 收到刷新请求的实例是“随机”的,这意味着 2 个实例中只有 1 个被告知刷新数据。因此,有时使用我们服务的用户会获取最新数据,有时可能会过时几个小时。

因此,如果我有一个响应 IP 的云服务,但有 2 个实例在其“后面”运行且具有单独的 IP,我如何调用此请求并确保两个实例都根据需要进行更新?

PS - 我知道 Azure 现在有“负载均衡器”工具可用,如果需要,我可以非常轻松地使用一个实例作为我的主实例,并让第二个实例作为故障转移,如果这是一个可行的选项?

最佳答案

您当前的解决方案设计过度。您有一个外部服务只是为了触发 Azure 服务内部的定期事件。如果您的 ISP 出现故障并且您在一段时间内无法从一个 ISP 连接到另一个该怎么办?

更好的方法是让每个实例有效地向自身发送 HTTP 请求 http://localhost/service.svc这将消除对外部服务的依赖,并解决通过负载均衡器到达每个实例的问题。

我假设您有一个网络角色。取决于您的RoleEntryPoint.Run()您可以从那里启动单独的线程,或者只是运行一个带有 Sleep() 的无限循环,并从那里发送这些 HTTP 请求。

关于wcf - 更新 Azure 云服务的单个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30763757/

相关文章:

.net - 寻找 .NET CORBA 库的建议

使用 basicHttpBinding 的 WCF 服务仍在发送内容类型 "text/xml"

c# - 在 Azure 的 IIS 中使用 net.tcp 绑定(bind)托管 WCF 服务

azure - 如何将 azure 链接的 VSTS/DevOps 移动到另一个帐户/azure 订阅

适用于辅助角色的 Azure 应用程序见解

c# - 超出 WCF MaxConcurrentSessions

azure - 使用 DeviceLifecycleEvents 源的 IoT 中心消息路由不起作用

azure - AKS 模板创建新资源组

azure - 如何升级现有云服务项目以使用 Azure SDK 3.0?

azure - 错误 WAT200 : No default service configuration "ServiceConfiguration.cscfg" could be found in the project