我需要在Windows Azure項目中實時更改某些配置設置,並且需要通過Web服務調用更改它們(更新應用程序的配置無論是通過平臺api還是Azure管理站點都不是這裏的選項)。Azure:使用Full-IIS的WebRole通信(netTcpBinding)
該項目有多個網絡和工作者角色 - 所有這些角色在更改時都需要了解新配置。
該配置被持久化爲持久存儲,並且在運行期間它也被緩存在靜態變量中。
我的解決方案是在我的角色上創建一個內部(tcp)端點,並使用它來遍歷這些角色中的所有角色和實例,隨時創建客戶端並告訴實例有關新設置。 (幾乎相同:http://msdn.microsoft.com/en-us/gg457891)
起初,我在WebRole的RoleEntryPoint中啓動了一個ServiceHost ...我很困惑爲什麼當我逐步完成通信時,一切似乎都正常工作(靜態變量的設置正確) - 但是當我做其他web服務調用時,靜態變量似乎已經「忘記」我設置的內容。
這是在本地和Azure分段環境中的情況。
此時我意識到由於我們使用的是完全IIS模式,因此RoleEntryPoint和Web服務在兩個獨立的進程中運行 - 一個在Azure的存根中,另一個在IIS中。
「沒有問題」我說過,我只需將啓動ServiceHost的代碼行從我的RoleEntryPoint移動到global.asax中 - 此時ServiceHost將以與其餘部分相同的過程啓動的網站 - 和靜態變量將是相同的。
這是我遇到問題的地方;這對我在本地機器上運行的開發環境非常有用。只要我部署到分級,我開始收到錯誤電子郵件說,用於連接到服務的渠道無法關閉,因爲它處於「故障狀態」。
問:
- 什麼天青與導致此開發環境不同?
- 我該如何解決或解決問題?
- 有沒有人有任何關於如何獲得更多描述性錯誤的一般性建議......我必須在Azure中啓用完整的wcf診斷才能獲取此信息,或者是否有其他方式可以獲取異常詳細信息?
後續:
通過遠程桌面我已經學到了一些有趣的事情:
非HTTP激活默認情況下未在Azure上WebRoles安裝。我相信這可以通過啓動腳本來解決:
start/w pkgmgr/iu:WCF-NonHTTP-Activation;
通過Web角色在IIS中創建的網站默認情況下未啓用net.tcp協議。我也相信這可以用一個啓動腳本來克服:
%SYSTEMROOT%\ SYSTEM32 \ INETSRV \ Appcmd.exe的設置應用程序 「網站名稱這裏」 /enabledProtocols:https,http,net.tcp
由於截止日期迫使我暫時實施一些解決方法,我還沒有時間採取這種方式。
與該主題相關的一些有用的鏈接:
http://msdn.microsoft.com/en-us/magazine/cc163357.aspx
http://forums.iis.net/t/1160443.aspx
http://msdn.microsoft.com/en-us/library/ms731053.aspx
我不知道這個問題的解決方案是什麼,但我遇到了非常類似的東西:http://stackoverflow.com/questions/5956814/unable-to-host-a-service-bus- wcf-host-in-iis-on-azure – knightpfhor 2011-05-22 10:13:02