我们在 ASP.NET MVC 解决方案中遇到了类似的挑战,该解决方案使用运行 WIF STS 的第二个 Web 角色进行基于声明的身份验证。MVC 应用程序的 web.config 在本地模拟器中运行时需要知道 STS 的非负载均衡器 IP 地址。
此外,我们有自定义代码构建 URL 路由,它只能看到模拟器分配的内部 IP 地址 (127.255.0.X)。这些路由在通过负载均衡器传回时会导致问题。我们还关闭了 IIS 中的默认网站,以保证模拟器完成端口重新映射。
使用 Azure 1.8 SDK,我们观察到,当从命令行启动应用程序并且删除开发结构中的所有其他部署时,本地模拟器将始终分配 127.255.0.X 地址。
一旦解决方案被打包到 VS2010 中,我们构建了一个 PowerShell 脚本来从命令行启动 Web 角色。我们有一个名为 AzureLocal 的构建配置和 Web 转换,用于为本地模拟器打包。
Import-Module WebAdministration
Stop-WebSite 'Default Web Site'
$env:WindowsAzureEmulatorInstallPath = (Get-ItemProperty -Path "Registry::HKLM\Software\Microsoft\Windows Azure Emulator" -Name InstallPath).InstallPath
$env:ServiceHostingSDKInstallPath = $env:WindowsAzureEmulatorInstallPath + '.NET SDK\2012-10'
$env:Path = $env:WindowsAzureEmulatorInstallPath + 'emulator;' + $env:WindowsAzureEmulatorInstallPath + 'devstore;' + $env:ServiceHostingSDKInstallPath + 'bin;' + $env:Path
csrun /devfabric:start
csrun /devstore:start
csrun /removeAll
csrun /devfabric:clean
csrun Application\Foobar.Extensions.Azure\csx\AzureLocal Application\Foobar.Extensions.Azure\bin\AzureLocal\app.publish\ServiceConfiguration.Local.cscfg
Write-Host "Application Pools to Attach for Debugging"
get-item IIS:\AppPools\*
$ie = New-Object -ComObject InternetExplorer.Application
$ie.Navigate("https://127.255.0.1:444")
$ie.Visible = $true
您的应用程序听起来比我们的 STS 和 MVC 组合具有更多的移动部分,但如果您可以在 Visual Studio 之外编写启动脚本,那么您可以获得可预测的地址分配。