Как указать IP-адрес, к которому привязано мое приложение?

У нас есть довольно сложная система, которую мы разрабатываем, включающая несколько различных приложений (MVC, WCF на основе http, WCF на основе TCP, ADFS и некоторые общие рабочие роли), развернутых в Azure. Для локальной отладки нам нужно, чтобы они работали в локальной среде разработки, а также в IIS. Я выполнил почти все, что мне нужно, и все работает, за исключением одного: я не могу предсказать, к какому IP-адресу будут привязаны различные вещи в Dev Fabric. Иногда это 127.0.0.1, иногда 127.0.0.3, иногда 127.0.0.4 (а может и какие-то другие?). Для моих преобразований файлов конфигурации и доверительных отношений с проверяющей стороной ADFS мне нужно заранее знать, какими будут эти IP-адреса.

Как мне управлять/контролировать (или, по крайней мере, прогнозировать) эти IP-адреса специально для моего веб-сайта? (В WCF все хорошо) Если я действительно могу развернуть все на моей фабрике разработки с указанием правильных IP-адресов, тогда все работает! Тем не менее, это очень громоздко и требует нескольких изменений в файлах преобразования web.config и app.config каждый раз, когда мне это нужно (не говоря уже о перенастройке сервера ADFS каждый раз, когда он изменяется), так что это не является устойчивой ситуацией любые значения!


person Jaxidian    schedule 15.02.2013    source источник
comment
Какую версию Azure SDK вы используете?   -  person mcollier    schedule 15.02.2013
comment
Я использую инструменты v1.8 (октябрь 2012 г.), и, похоже, моя единственная DLL, которую я только что проверил (StorageClient), имеет версию 1.7.0.0. Если обновление необходимо, ничего страшного — мы можем это сделать (и в любом случае скоро это сделаем).   -  person Jaxidian    schedule 15.02.2013
comment
К вашему сведению, мой вопрос идентичен этот вопрос, но этот ответ, похоже, не относится ко мне. Какой бы порт я ни пробовал, 127.0.0.1 не приводит меня к моей веб-роли. На данный момент меня туда ведет 127.0.0.5:444. Очень болезненно перенастраивать вещи так часто (и для каждого отдельного разработчика) каждый раз, когда это меняется...   -  person Jaxidian    schedule 18.02.2013
comment
Хорошо, этот вопрос не совсем идентичен. Кажется, ему нужны IP-адреса для конкретных экземпляров. Меня устраивает IP-адрес балансировщика нагрузки. Но мне просто нужно что-то предсказуемое.   -  person Jaxidian    schedule 18.02.2013
comment
Вы пробовали это blog.syntaxc4.net/post/2011/01/06/   -  person dicemaster    schedule 22.02.2013
comment
@gauravvgat Эта информация больше не действительна для современных версий SDK. Лучшее, что я смог найти, это папки x64 и x86 под C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\2012-10\bin\runtimes\base, в обеих из которых было IISConfigurator. Однако там нет файла конфигурации для IISConfigurator.exe.   -  person Jaxidian    schedule 23.02.2013
comment
Бьюсь об заклад, вы уже пробовали это, но отключение (и/или) выход из среды разработки использовалось для устранения проблем с IP/портом для меня в прошлом.   -  person Nico    schedule 23.02.2013


Ответы (1)


У нас была аналогичная проблема с решением ASP.NET MVC, в котором используется вторая веб-роль, работающая с WIF STS для Аутентификация на основе утверждений. Файл web.config приложения MVC должен был знать IP-адрес STS без балансировщика нагрузки при работе в локальном эмуляторе.

Кроме того, у нас есть настраиваемые URL-маршруты для построения кода, которые видят только внутренний IP-адрес (127.255.0.X), назначенный эмулятором. Эти маршруты вызовут проблемы при передаче обратно через балансировщик нагрузки. Мы также закрыли веб-сайт по умолчанию в IIS, чтобы гарантировать переназначение портов, выполненное эмулятором.

Мы заметили, что с Azure 1.8 SDK локальный эмулятор последовательно назначал адреса 127.255.0.X, когда приложение запускалось из командной строки, а все другие развертывания в структуре разработки удалялись.

Мы создали сценарий PowerShell для запуска веб-ролей из командной строки после того, как решение было упаковано в VS2010. У нас есть конфигурация сборки и веб-преобразование под названием AzureLocal, которые мы используем для упаковки локального эмулятора.

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, вы можете получить предсказуемое назначение адресов.

person tawman    schedule 26.02.2013
comment
Вы ответили на мой вопрос очень небольшой частью своего ответа: и все остальные развертывания в структуре разработки были удалены. Это наша проблема. Выделенные IP-адреса продолжают увеличиваться при развертывании других вещей в фабрике разработки, но сбрасываются при удалении всех развертываний. Это, конечно, не идеально, но это ключевая часть того, что у нас есть, чтобы позволить нам отлаживать вещи без огромного времени простоя между каждой компиляцией. Каждый раз перезагрузка/перезапуск эмулятора были слишком большими накладными расходами, но, по крайней мере, мы можем работать с этим. Конечно, хотелось бы, чтобы мы могли управлять им лучше! - person Jaxidian; 26.02.2013
comment
@Jaxidian Я понимаю, откуда вы пришли, поскольку нам потребовалось много проб и ошибок, чтобы получить работающую локальную конфигурацию для нескольких машин разработки. - person tawman; 26.02.2013