2013-02-19 41 views
2

不確定在Azure服務中這是否可行,以及最佳方法是什麼。在Azure中的網絡和輔助角色之間共享代碼

我有一個類從我的數據庫中提取數據並生成一個xml輸出。在正常情況下,由於這是在一個輔助角色中運行的,它將在必要時運行並將XML推送到外部Web服務。 但是,我還需要將此功能作爲服務公開的功能,以便不同的外部Web服務可以對我的系統進行Web服務調用並獲得完全相同的XML響應。 我可以在一個輔助角色中設置一個RESTful webservice,並構建與我的輔助角色中存在的功能相同的功能 - 問題是我現在有重複的代碼。

我該如何設置它,以便我的代碼可以從數據庫獲取額外數據,執行一些計算,生成xml所有坐在可從webrole(由外部web服務調用觸發)和worker角色(按正常運行時間表)。

我已經瀏覽了關於TCP內部端點和worker webrole通信的所有問題,但他們都沒有涉及允許webrole調用workerrole上的方法並將該數據傳遞給調用者的情況。

如果有人可以幫助我,這將非常感激。 謝謝

+0

關於第二個想法 - 我想這裏的答案是創建一個新的通用項目,其中包含任何共享代碼,並從我的網絡和工作者角色引用此項目。這可能是最有意義的。在Azure中這樣做的任何問題? – Gotts 2013-02-19 18:54:59

+0

這基本上就是@sharptooth所暗示的,只是假設項目將被單獨編譯。 – knightpfhor 2013-02-20 19:31:44

回答

5

嗯,從技術上說,解決方案是您創建一個包含所有共享代碼並從兩個角色項目中使用它的類庫(.NET程序集)。您必須在每個角色項目中對該程序集的引用上將「複製本地」設置爲「true」,以便將程序集打包到角色包中。

但是在你的情況下可能會有更好的解決方案。您可能只是爲了兩個目的而使用Web角色。我的意思是一個Web角色就像一個工作者角色,只是安裝了一個獎金IIS。除非你真的(真的)需要分別擴展和更新它們,否則你可以節省很多管理和部署的痛苦,還可以通過使用web角色來完成一些任務。

+0

謝謝。很有幫助。我需要查看本地副本,並考慮您的建議,以使用Web角色 - 但我相信我們需要保留一個單獨的網絡和工作人員(現在反正)。 這是我第一次部署到Azure - 如果我在兩個項目中引用了使用共享代碼創建的類庫,它是否會自動將其包含在部署中?即爲什麼這是一個麻煩? – Gotts 2013-02-20 18:38:03

+0

@Gotts:沒有多少麻煩,無論如何你會添加一個參考,唯一的額外步驟是設置「複製本地」。我想說這是需要的原因是因爲Azure SDK和「工具」是無恥的越野車。 – sharptooth 2013-02-21 06:12:06

+0

感謝您的信息! – Gotts 2013-02-21 20:34:22

1

如果我是你,我會讓它作爲Web角色然後將消息發送給工作者角色,並根據此消息,觸發輔助角色上的事件以啓動所需的過程。

您可以使用隊列存儲或WCF服務來實現這一點。

+0

是的,但那不允許我同步地將工作者角色響應傳回web角色。我知道同步通信有問題,所以我想我的問題是圍繞工作人員和網絡之間的共享代碼。 我想它不可能? – Gotts 2013-02-19 17:51:08

+0

你是否使用服務總線檢查它們之間的連接,例如使用服務總線隊列創建工作者角色http://middlewareinthecloud.com/2012/06/23/azureservice-bus-queues-in-worker-roles/或內部通信在角色之間。我發現MSDN上的類似問題,我希望這可以幫助你http://social.msdn.microsoft.com/Forums/en-US/windowsazureconnectivity/thread/5193bfa8-3d1a-44d8-8eb6-1c87250c3b30 – hhaggan 2013-04-10 22:16:42

+0

我認爲這個網址可以也幫助你http://windowsazurecat.com/2011/08/how-to-simplify-scale-inter-role-communication-using-windows-azure-service-bus/ – hhaggan 2013-04-10 22:20:02