如何从 Azure webjob 到 Azure webapp 进行通信?

How to communicate from Azure webjob to Azure webapp?

我是 运行 Azure webjob 和 Azure webapp。作业定期运行,作业的结果需要在 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 有一个我不知道的内部端口号。

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

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

只需从 WebJob 写入一个文件,然后在您的 Web 应用程序中使用文件系统观察器来识别文件何时创建或更改。

Note you cannot communicate through localhost in Azure Websites (or WebJobs) and cannot listen on a port that is not 80/443.

您有几个选择:

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

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

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