2014-09-24 72 views
1

我有一個具有/ janitor路由的Azure Worker角色。此路線顯示此實例的計數器和日誌。當我讓這個角色有兩個或更多的實例時,我無法控制我正在訪問哪個實例。我的問題是:我如何從公有IP可靠地訪問角色的特定實例?我想了解Instance Level Public Ip。這不是我想要的,因爲它需要一些額外的設置。對特定Azure實例的HTTP請求

我想要做的是類似於遠程桌面客戶端(mstsc.exe)。我打開了一個遠程桌面連接到每個單獨的實例。我注意到他們都訪問我的工作者角色相同的公共IP和端口,但不知何故mstsc.exe設法獲得兩個單獨的屏幕,每個屏幕一個。 mstsc.exe似乎在TCP級別複用了兩個服務器屏幕。這很花哨,我不想走那麼遠。

我只需要向每個單獨的實例發出HTTP請求。有沒有辦法做到這一點?例如。一個HTTP標頭,如X-Azure-Instance-Id = ???。

+0

使用實例ID拆分路由,併爲不同的實例創建單獨的Worker角色。每個實例1個工作者角色。 – 2014-09-24 00:28:55

+0

一個實例實際上做了什麼就是將您的應用程序放入另一個虛擬機中,位於負載平衡器後面。因此你無法控制哪個實例請求被路由到 – 2014-09-24 00:31:05

+0

是的,我知道每個實例都是一個獨立的虛擬機。 我該如何做路線拆分? – Gatis 2014-09-24 00:34:57

回答

1

RDP的方式是通過在每個實例上使用RemoteForwarderAgent.exe和RemoteAccessAgent.exe。 mstsc.exe用來連接的RDP文件嵌入了一個標識要連接的實例的cookie。當您啓動RDP連接時,連接將隨機(通過負載均衡器)到任何實例,並將連接到RemoteForwarderAgent.exe。 RemoteForwarderAgent將讀取cookie,然後通過使用InternalEndpoint的RemoteAccessAgent在Cookie中指定的實例在內部建立連接。你可以爲你的路線設置類似的東西,但我懷疑這是比你實際需要更多的工作。

最簡單的選擇是使用InstanceInputEndpoint - http://msdn.microsoft.com/en-us/library/azure/hh180158.aspx。這將允許您在唯一端口上訪問每個實例,因此要查詢特定實例上的/ janitor路由,您將向http://myservice.cloudapp.net/janitor:81發出請求(其中「81」是要連接的特定實例的InstanceInputEndpoint端口) 。這確實需要一些額外的設置(在.csdef中有一行額外的內容,並且客戶端需要一些邏輯來確定端口號),但不會像實例級別的公有IP那樣多。

+0

InstanceInputEndpoint方法的問題是可用的端口號都很高(我相信10000+)並且經常被防火牆,代理或類似的東西所禁止。我們改變了我們的架構,因爲很多客戶端都有連接問題 – enzi 2014-11-25 08:30:18