如何指定我的应用绑定的IP地址?

时间:2013-02-15 17:37:28

标签: visual-studio-2010 azure azure-web-roles azure-compute-emulator

我们正在开发一个相当复杂的系统,涉及一些不同的应用程序(MVC,基于http的WCF,基于TCP的WCF,ADFS和一些通用的工作者角色),所有这些都部署到Azure。对于本地调试,我们需要在本地Dev结构和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服务器),所以这不是一个可持续的情况任何方式!

1 个答案:

答案 0 :(得分:1)

我们在ASP.NET MVC解决方案中遇到了类似的挑战,该解决方案使用第二个Web角色为Claims-Based Authentication运行WIF STS。在本地模拟器中运行时,MVC应用程序的web.config需要知道STS的非负载均衡器IP地址。

此外,我们还有自定义代码构建URL路由,只能看到模拟器分配的内部IP地址(127.255.0.X)。这些路由在通过负载均衡器传回时会导致问题。我们还关闭IIS中的默认网站,以保证模拟器完成端口重映射。

使用Azure 1.8 SDK,我们观察到当从命令行启动应用程序并且删除了开发结构中的所有其他部署时,本地模拟器将始终如一地分配127.255.0.X地址。

我们构建了一个PowerShell脚本,一旦解决方案打包在VS2010中,就可以从命令行启动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外部编写启动脚本,那么您可以获得可预测的地址分配。