如何从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有一个我不知道的内部端口号。
你有几个选择:
- 使用文件系统传递消息
- 使用Azure存储队列在两者之间传递消息
- 使用Azure Service Bus Queue传递消息
- 使用任何共享存储(数据库,Azure存储等)来传递消息
所有这些方法的好处是它使您的消息传递异步,因此对两个服务(Web应用程序或Web作业)中的一个下降一段时间更具弹性。
您可以使用文件系统在WebJob和网站之间进行通信。 它们之间以及所有实例之间共享。
只需从WebJob写一个文件,并使用webapp中的文件系统观察程序来识别文件的创建或更改时间。
请注意,您无法通过Azure网站(或WebJobs)中的localhost进行通信,也无法侦听非80/443的端口。
您可以使用azure服务总线队列,然后指向您的服务(Web应用程序)以使用队列中的消息。