6

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

是否有任何正式的方法来控制哪个模拟角色绑定到哪个 IP?如果没有,那么启动/绑定的顺序是否与 Roles 文件夹中项目的顺序相同,如果是这样,那么将我的网络角色称为 Aardvark 之类的,以确保它始终是第一个绑定的?

4

2 回答 2

6

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

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

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

在我的 WebRoles 中,我总是提到像debug.myservice.comdebug.myotherservice.com这样的域名。

使用主机文件解析本地 IP 地址,您可以在以下位置找到:

windows/system32/drivers/etc/hosts

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

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

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

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

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

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

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

这里的脚本:

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 并解析结果以提取角色的本地端点地址并更新主机文件。

希望这有帮助。

于 2013-05-29T12:40:12.230 回答
4

为什么要更改该 IP 地址?这仅在内部使用以避免 IP/端口冲突。您的所有角色只能通过 127.0.0.1:[port] 访问,这是您应该用作依赖方应用程序基地址的地址。127.255.0.XX 地址是位于 Compute Emulator 的模拟负载均衡器后面的内部地址。

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

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

在此处阅读有关IP 地址和端口分配的信息

更新

尽管您的应用程序在 IIS Express 中绑定到 127.255.0.XX(模拟直接 IP 地址,又名 DIP),但对您的应用程序的实际调用应通过 127.0.0.1:81(模拟虚拟 IP 地址,又名 VIP)(其中仅端口更改)。这是 Visual Studio 启动应用程序时的默认加载页面。开发 Fabric(又名 Compute Emulator)模拟了负载均衡器,它侦听 127.0.0.1:81(模拟 VIP)并将流量重定向到适当的实例,这些实例分布在 127.255.0.XX(模拟 DIP)上。这就是为什么在使用计算模拟器和配置 ACS 依赖方时必须始终使用 127.0.0.1 的原因。您所做的任何其他事情都是错误的,并且不代表 Azure 环境。

您可以通读这个那个博客条目,以了解 Windows Azure 的术语和网络。

于 2012-08-15T10:48:27.197 回答