2015-06-29 46 views
4

我正在Azure webapp上運行Azure webjob。作業定期運行,並且在web應用程序中需要作業的結果。我如何在那裏得到結果?如何從Azure webjob與Azure 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

我不知道命名管道是否可以在WebApps中工作 –

回答

2

您有幾種選擇:

  1. 使用文件系統來傳遞消息
  2. 使用Azure存儲隊列兩個
  3. 使用Azure的服務總線隊列之間傳遞消息來傳遞消息
  4. 使用任何共享存儲(數據庫,Azure存儲等)來傳遞消息

所有這些方法的好處是,它使得消息傳遞異步,從而更有彈性地適應兩種服務之一(Web應用程序或Web作業)停滯一段時間。

+0

我想我要採用共享存儲方式。我將需要一個數據庫早晚爲這個應用程序,所以爲什麼不現在就開始。我只是認爲在同一主機上的兩個應用程序之間進行通信會更容易。 –

0

您可以使用azure服務總線隊列,然後指出您的服務(Web應用程序)使用隊列中的消息。

+1

這是可能的,但看起來似乎是爲了我想要的東西。我不應該通過服務總線傳遞一條消息到達在同一主機上運行的應用程序。 –

2

您可以使用文件系統在WebJob和網站之間進行通信。 它們之間以及所有實例之間共享。

只需從WebJob中寫​​入一個文件,然後在Web應用程序中使用文件系統監視器來識別文件何時被創建或更改。

請注意,您無法通過Azure網站(或WebJobs)中的本地主機進行通信,也無法偵聽非80/443端口。

+1

按照Zain的建議,我將使用共享存儲方法(數據庫)。你能解釋一下,或者向我提供一些關於爲什麼你不能在本地主機上與Azure網站進行通信的文檔? –