Azure Compute Emulator:是否可以控制各个实例的IP?

时间:2012-08-15 10:39:25

标签: azure iis-express

使用2012年6月的Azure SDK,Visual Studio 2010和IIS Express,我有一个已在127.255.0.2上运行的Web应用程序。我正在使用ACS进行身份验证,我的应用程序被配置为此IP的依赖方。我在我的解决方案中添加了一个新的辅助角色,由于某种原因,这将我的Web应用程序的IP推回到127.255.0.3。这是解决方案中其他地方的第三次更改已经改变了这个IP,我有点厌倦了必须添加新的依赖方设置并重新运行STS向导。

是否有任何正式方法可以控制哪个模拟角色绑定到哪个IP?如果没有,则启动/绑定的顺序与Roles文件夹中的项目顺序相同,如果是,那么调用我的Web角色就像Aardvark一样,确保它始终首先绑定?

2 个答案:

答案 0 :(得分:6)

我不知道我的经历是否与描述的情景完全匹配,但我认为它至少可以成为一种灵感。

在我的解决方案中,我有四个不同的云服务,每个人都有一个Web角色,每个人都必须知道其他服务的URL才能正常工作。 在生产中我确切知道我所有服务的网址,我可以通过其域名引用每个服务。 但是,当调试时,这可能是一场噩梦,因为没有选项将云服务绑定到特定的IP地址(和端口),DevFabric无法保证特定的云服务在两个不同的调试会话之间保持相同的地址

我用一种简单的技术解决了这个问题:

在我的WebRoles中,我总是指域名,如 debug.myservice.com debug.myotherservice.com

使用您可以在

中找到的 hosts 文件解析本地IP地址
windows/system32/drivers/etc/hosts

通过附加一些简单的语句,例如:

127.0.0.1 debug.myservice.com
127.0.0.2 debug.myotherservice.com

这解决了这个问题但可能非常无聊,因为每次启动新的调试会话时都需要手动更新 hosts 文件。

但是有一个简单而强大的解决方案。 您知道可以设置每次初始化云服务时执行的简单启动脚本,您可以在此处找到详细信息:

http://msdn.microsoft.com/en-us/library/windowsazure/hh180155.aspx

当您在云上或模拟器中运行时,也可以运行不同的脚本。

我所做的是运行一个脚本,每次我的云服务在模拟器中(并且仅在模拟器中)初始化时,该脚本会自动更新hosts文件。

这里是剧本:

IF "%ComputeEmulatorRunning%" == "true" (
    cd Startup
    UpdateDnsHostsOnDebugEnv.exe MyCompany.MyService.Site.WebRole debug.myservice.com
    cd..
)

这里需要添加到 ServiceDefinition.csdef 以便在启动时运行脚本:

<Startup>
    <Task commandLine="Startup\UpdateDnsHosts.cmd" executionContext="elevated" taskType="foreground">
       <Environment>
           <Variable name="ComputeEmulatorRunning">
               <RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
           </Variable> 
       </Environment>
     </Task>
</Startup>

请注意使用 UpdateDnsHostsOnDebugEnv.exe 程序。这是我编写的一个简单的控制台应用程序,只需运行csrun.exe并解析结果以提取角色的本地端点地址并更新 hosts 文件。

希望得到这个帮助。

答案 1 :(得分:4)

您为什么要更改该IP地址?这仅用于内部以避免IP /端口冲突。您的所有角色只能通过127.0.0.1:[port]访问,这是您应该用作依赖方应用的基地址的地址。 127.255.0.XX地址是位于Compute Emulator的仿真Load Balancer后面的内部地址。

没有正式或非正式的方法来控制Compute Emulator的实例/角色的实例IP地址。即使有办法做到这一点,我也不建议使用它!

您始终可以通过RoleEnvironment.CurrentRoleInstance.InstanceEndpoints属性获取云服务中配置的任何端点的正确IP地址和端口。

了解IP Address and Port allocation here

<强>更新

虽然您的应用程序绑定到IIS Express中的127.255.0.XX(模拟直接IP地址,又称DIP),但对您的应用程序的实际调用应通过127.0.0.1:81(模拟虚拟IP地址,即VIP )(只有端口更改)。这是Visual Studio启动应用程序时的默认加载页面。开发Fabric(a.k.a.Compute Emulator)模拟了Load Balancer,它侦听127.0.0.1:81(模拟VIP)并将traffinc重定向到适当的实例,这些实例分布在127.255.0.XX(模拟DIP)上。 这就是为什么在使用计算模拟器和配置ACS信赖方时必须始终使用127.0.0.1。您执行的任何其他操作都是错误的,并且不代表Azure环境。

您可以阅读thisthat博客条目,了解Windows Azure的提醒和网络。