【问题标题】:How to communicate from Azure webjob to Azure webapp?如何从 Azure webjob 到 Azure webapp 进行通信?
【发布时间】:2015-09-15 20:06:12
【问题描述】:

我正在与 Azure webapp 一起运行 Azure webjob。作业会定期运行,并且 webapp 中需要作业的结果。我如何在那里得到结果?

我尝试使用 WCF netNamedPipeBinding,但由于 Azure webapps 没有启动任务,我无法将 net.pipe 绑定添加到 IIS 网站,也无法启用 net.pipe 协议。

我现在用basicHttpBinding 让它工作,但是这个绑定暴露在整个互联网上,这是我绝对不想要的。我只是希望在同一台机器上运行的 webjob 和 webapp 之间进行机器本地通信。

更正:我以为我可以在 Azure 上运行它,但事实并非如此。在 Azure 上运行时,我收到来自 webjob 的错误:An attempt was made to access a socket in a way forbidden by its access permissions 127.0.0.1:80(使用basicHttpBinding)。可能 webapp 有一个我不知道的内部端口号。

【问题讨论】:

  • 我想知道命名管道是否在 WebApps 中工作

标签: c# wcf azure azure-web-app-service azure-webjobs


【解决方案1】:

你有几个选择:

  1. 使用文件系统传递消息
  2. 使用 Azure 存储队列在两者之间传递消息
  3. 使用 Azure 服务总线队列传递消息
  4. 使用任何共享存储(数据库、Azure 存储等)传递消息

所有这些方法的好处在于,它使您的消息传递异步,因此对一段时间内出现故障的两种服务(网络应用或网络作业)之一更具弹性。

【讨论】:

  • 我想我会选择共享存储方法。这个应用程序迟早需要一个数据库,所以为什么不现在开始。我只是认为在同一主机上的两个应用程序之间进行通信会更容易..
【解决方案2】:

您可以使用文件系统在 WebJob 和网站之间进行通信。 它在它们之间以及在您的所有实例之间共享。

只需从 WebJob 编写一个文件,并在您的 web 应用程序中使用文件系统观察程序来识别文件何时被创建或更改。

请注意,您无法通过 Azure 网站(或 WebJobs)中的 localhost 进行通信,也无法侦听非 80/443 端口。

【讨论】:

  • 我将采用 Zain 建议的共享存储方法(数据库)。你能解释一下或指出一些关于为什么不能在 localhost 上与 Azure 网站通信的文档吗?
【解决方案3】:

您可以使用 azure 服务总线队列,然后将您的服务(Web 应用)指向队列中的消息。

【讨论】:

  • 这是可能的,但对于我想要的东西来说似乎有点矫枉过正。我不必一直通过服务总线传递消息以到达在同一主机上运行的应用程序。
【解决方案4】:

最接近的答案是在应用设置中设置WEBSITE_DISABLE_SCM_SEPARATION=true。这将使 WebApp 和 SCM 进程在同一个沙箱中工作。不幸的是,此选项已被 Azure 弃用,不再受支持。感谢大家尝试回答。更多信息可以在这里找到。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 2020-01-09
    • 1970-01-01
    相关资源
    最近更新 更多