我在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有一个我不知道的内部端口号。
答案 0 :(得分:4)
您有几个选择:
所有这些方法的好处在于它使您的消息传递异步,从而对两个服务(Web应用程序或Web作业)中的一个服务器的某些时间内更具弹性。
答案 1 :(得分:2)
您可以使用文件系统在WebJob和网站之间进行通信。 它们之间以及所有实例之间共享。
只需从WebJob写一个文件,并使用webapp中的文件系统观察程序识别文件的创建或更改时间。
请注意,您无法通过Azure网站(或WebJobs)中的localhost进行通信,也无法侦听非80/443的端口。
答案 2 :(得分:0)
您可以使用azure服务总线队列,然后指向您的服务(Web应用程序)以使用队列中的消息。
答案 3 :(得分:0)
最接近的答案是在“应用程序设置”中设置WEBSITE_DISABLE_SCM_SEPARATION=true
。这将使WebApp和SCM流程在同一沙箱中工作。不幸的是,Azure不赞成使用此选项,并且不再支持。感谢所有尝试的答案。可以在此处找到更多信息。