Можно ли запрашивать VIP (с портами конечных точек) как в эмулируемой вычислительной среде, так и в облаке "чисто"?
У меня есть две веб-роли, одна из которых предоставляет API данных, а другая - веб-сайт внешнего интерфейса, а затем несколько вычислительных ролей, создающих данные.
Чего я хотел бы добиться, так это с помощью веб-роли www, чтобы запросить VIP веб-роли API данных, запустив функцию запроса, которая абстрагирует детали, если я работаю локально или в Azure. Похоже, запрос PublicIPEndpoint
будет работать в Azure, но не локально. Потребность была бы такова, что я мог бы выдать, скажем, некоторые константы URL для JavaScript.
Есть ли лучший способ, чем жестко закодировать некоторую строку или, скажем, прочитать .csdef
файл с относительным путем и взять его оттуда?
В коде грубо что-то вроде
let IsInAzureFabric =
try
RoleEnvironment.IsAvailable
with _ ->
false
let IsInAzureCloud =
try
IsInAzureFabric && not RoleEnvironment.IsEmulated
with _ ->
false
let GetVirtualIP(roleName, endPoint) =
try
if IsInAzureCloud then
//Collect the protocol (http/https) from the endpoint information and pick only one endpoint as it's the one shown on the loadbalancer...
RoleEnvironment.Roles.[roleName].Instances
|> Seq.map(fun roleInstance -> "http://" + roleInstance.InstanceEndpoints.[endPoint].PublicIPEndpoint.ToString())
elif IsInAzureFabric then
//In local development fabric...
Seq.ofList ["http://localhost:8080"]
else
//This is locally outside of Azure Fabric (or in virtual machine?).
Seq.ofList ["http://localhost:1943"]
with _ ->
Seq.empty