如何从Azure webjob与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有一个我不知道的内部端口号。

你有几个选择:

  1. 使用文件系统传递消息
  2. 使用Azure存储队列在两者之间传递消息
  3. 使用Azure Service Bus Queue传递消息
  4. 使用任何共享存储(数据库,Azure存储等)来传递消息

所有这些方法的好处是它使您的消息传递异步,因此对两个服务(Web应用程序或Web作业)中的一个下降一段时间更具弹性。

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

只需从WebJob写一个文件,并使用webapp中的文件系统观察程序来识别文件的创建或更改时间。

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

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