3

我们正在开发一个相当复杂的系统,其中涉及几个不同的应用程序(MVC、基于 http 的 WCF、基于 TCP 的 WCF、ADFS 和一些通用工作角色),所有这些都部署到 Azure。对于本地调试,我们需要这些在本地 Dev Fabric 和 IIS 中运行。我已经完成了我需要做的几乎所有事情,并且一切正常,除了一件事:我无法预测各种事物将在 Dev Fabric 中绑定到哪个 IP 地址。有时是 127.0.0.1,有时是 127.0.0.3,有时是 127.0.0.4(也许还有其他一些?)。对于我的配置文件转换和 ADFS 依赖方信任,我需要提前知道这些 IP 是什么。

我如何专门为我的网站管理/控制(或至少预测)这些 IP 地址?(WCF 一切都很好)如果我实际上可以将所有内容部署到我的开发结构并引用正确的 IP,那么一切正常!但是,这样做非常麻烦,并且每次我需要对 web.config 和 app.config 转换文件进行几次调整(更不用说每次更改时重新配置 ADFS 服务器),所以这不是一个可持续的情况任何手段!

4

1 回答 1

1

我们在 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 之外编写启动脚本,那么您可以获得可预测的地址分配。

于 2013-02-26T05:02:48.480 回答