使用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一样,确保它始终首先绑定?
我不知道我的经历是否与描述的场景完全匹配,但我认为它至少可以成为一种灵感.
在我的解决方案中,我有四个不同的云服务,每个人都有一个Web角色,每个人都必须知道其他服务的URL才能正常工作.在生产中我确切知道我所有服务的网址,我可以通过其域名引用每个服务.但是,当调试时,这可能是一场噩梦,因为没有选项将云服务绑定到特定的IP地址(和端口),DevFabric无法保证特定的云服务在两个不同的调试会话之间保持相同的地址.
我用一种简单的技术解决了这个问题:
在我的WebRoles中,我总是提到像debug.myservice.com或debug.myotherservice.com这样的域名.
使用您可以在以下位置找到的hosts文件解析本地IP地址:
windows/system32/drivers/etc/hosts
Run Code Online (Sandbox Code Playgroud)
通过附加一些简单的语句,例如:
127.0.0.1 debug.myservice.com
127.0.0.2 debug.myotherservice.com
Run Code Online (Sandbox Code Playgroud)
这解决了问题,但可能非常无聊,因为每次启动新的调试会话时都需要手动更新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..
)
Run Code Online (Sandbox Code Playgroud)
在这里你需要添加到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>
Run Code Online (Sandbox Code Playgroud)
请注意UpdateDnsHostsOnDebugEnv.exe程序的使用.这是一个简单的控制台应用程序,我写的只是运行csrun.exe并解析结果以提取角色的本地端点地址并更新hosts文件.
希望这有帮助.
您为什么要更改该 IP 地址?这仅在内部使用,以避免 IP/端口冲突。您的所有角色只能通过 127.0.0.1:[port] 访问,这是您应该用作依赖方应用程序的基地址的地址。127.255.0.XX 地址是位于计算模拟器的模拟负载均衡器后面的内部地址。
没有正式或非正式的方法来控制计算模拟器的实例/角色的实例 IP 地址。另外,即使有办法做到这一点,我也不建议使用它!
您始终可以通过RoleEnvironment.CurrentRoleInstance.InstanceEndpoints属性获取云服务中配置的任何端点的正确 IP 地址和端口。
请在此处阅读有关IP 地址和端口分配的信息。
更新
尽管您的应用程序在 IIS Express 中绑定到 127.255.0.XX(模拟直接 IP 地址,又名 DIP),但对应用程序的实际调用应通过 127.0.0.1:81(模拟虚拟 IP 地址,又名 VIP)(其中仅端口更改)。这是 Visual Studio 启动应用程序时的默认加载页面。开发 Fabric(又名计算模拟器)模拟了负载均衡器,它侦听 127.0.0.1:81(模拟 VIP)并将流量重定向到分布在 127.255.0.XX(模拟 DIP)上的适当实例。这就是为什么在使用计算模拟器和配置 ACS 依赖方时必须始终使用 127.0.0.1。您所做的任何其他操作都是错误的,并且不代表 Azure 环境。
您可以阅读这个和那个博客文章来了解 Windows Azure 的语言学和网络。
归档时间: |
|
查看次数: |
3930 次 |
最近记录: |