Налаштуйте IIS Express для зовнішнього доступу до проекту VS2010


103

Я розробляю проект у VS2010 і можу переглядати свій сайт локально через IIS Express. Я хотів би включити зовнішній доступ через мережу.

Усі мої дослідження направили мене до цього запису в блозі: http://blogs.iis.net/vaidyg/archive/2010/07/29/serving-external-traffic-with-webmatrix-beta.aspx , що корисно, але робить начебто не показує, як налаштувати прив'язки для проекту, розпочатого у візуальній студії (я не можу знайти екран на знімках екрана, і я відредагував інформацію про прив'язку в applicationhost.config, але це, здається, не відображається, коли я запускаю сайт з візуальна студія).


10
будь ласка, прочитайте блог Скотта Хензельмана hanselman.com/blog/…
balexandre

Відповіді:


136

1 Після редагування файлу applicationhost.config (який знаходиться у папці IISExpress у ваших документах), прив'язки вашого сайту мають виглядати нижче:

<bindings>
  <binding protocol="http" bindingInformation="*:8080:*" />
</bindings>

Пов'язки складаються з трьох частин. По-перше, IP-адреса чи список, або, як у цьому випадку, підстановка. По-друге, номер порту, по-третє ім'я хоста, або список, або підстановочний знак (для фільтрації за Hostзаголовком). Для цілей розвитку тут найбільше підходить підстановка, оскільки ви, ймовірно, будете використовувати унікальний порт.

2 Оскільки ви використовуєте не локальне прив'язку хостів, потрібні додаткові дозволи. Ви можете запустити VS як адміністратор, або бажано додати URL-адреси ACL, щоб надати необхідні дозволи. У наведеному нижче прикладі дозвіл надається всім, але ви можете використовувати власне ім’я користувача.

Примітка. Обов'язково urlaclповинна відповідати прив'язці. Отже, urlaclза допомогою http://*:8080дозволу буде зв'язування *:8080:*, але не зв'язування, *:8080:localhostхоча остання є підмножиною першого. це означає, що замість того, щоб використовувати підстановку, ви перераховуєте заголовки хостів applicationhost.config, потрібно додати відповідність urlaclдля кожного.

Етапи налаштування HTTP.sys для зовнішнього трафіку схожі на налаштування сайту для використання зарезервованого порту. У ОС Windows 7 або Windows Vista із підвищеного командного рядка запустіть таку команду:

netsh http add urlacl url=http://*:8080/ user=DOMAIN\username

У Windows XP запустіть таку команду з підвищеного командного рядка:

httpcfg set urlacl /u http://*:8080/ /a D:(A;;GX;;;WD)

Примітка 2 Якщо запуск VS в якості адміністратора або додавання записів ACL не вирішує вашу проблему, запустіть IIS Express з командного рядка і перевірте, чи є обов'язкові повідомлення про помилку реєстрації. Щоб почати з командного рядка, дайте цю команду:

iisexpress.exe /site:"your-site-name"

3 Нарешті вам знадобляться записи брандмауера. Для цього найпростіше використовувати консоль «Брандмауер Windows з розширеною безпекою».

У розділі "Правила введення" виберіть "Нове правило ...".

  • Тип правила - "Користувацький".
  • Програма - Послуги-> Налаштувати ...-> Застосовувати лише до сервісів. (Хоча IIS Express не є послугою, HTTP-мультиплексор, який він використовує, є).
  • Протокол TCP
  • Конкретні порти: перерахуйте всі порти для всіх ваших прив'язок IIS Express. Ви можете повернутися до цього правила і додати порти в будь-який час. (Якщо це стає стомлюючим, ви можете додати такий діапазон, 40000-65534який охоплює весь діапазон, який використовує Visual Studio, але врахуйте, що це менш безпечно).
  • Дія "Дозволити з'єднання"
  • Профіль буде одним із наступних. Якщо ви сумніваєтесь, виберіть "Домен + приватний".
    • "Домен", якщо ваш корпоративний робочий стіл і працює лише на локальному домені
    • "Домен + приватне" Якщо ваша - це приватна машина розвитку в некорпоративному середовищі, або корпоративний ноутбук, який також повинен працювати вдома.
    • "Доменні, приватні та загальнодоступні", якщо вам потрібно демонструвати в неприватних мережах.
  • Ім'я має бути чимось на кшталт "IIS Express Dev Server"

12
@ user578913 Отже, я нарешті знайшов правильний файл applicationhost.config, відкривши запущену річ панелі завдань IIS Express і натиснувши на неї потім посилання на файл конфігурації. Я встановив порт на 1063 у другому рядку, так як саме було встановлено перший рядок. Перебіг командний рядок, і все виглядало нормально. Коли я переходжу до імені машини або імені машини: 1063 з іншої машини в мережі, я все одно нічого не отримую.
снодійний

15
добре, оскільки Visual Studio призначає порт (крім 8080), брандмауер Windows блокував його. Після відключення брандмауера Windows (я можу, можливо, просто відкрити порт, але я перебуваю в захищеній мережі) і використовуючи IP свого комп'ютера, а не ім'я машини, воно працювало. Дякую. Я б проголосував, але ще не маю відповіді = (
лукавий

3
Так, якщо для брандмауера Windows потрібно ввімкнути, ви явно додаєте порт 8080 TCP (або те, що ви використовуєте). У Windows 7 спочатку я намагався призначити порт "IIS Express Worker Process". Але це не вийшло. Мені довелося скористатися опцією "Нове правило" та дозволити порт 8080. Важливим також є вибір профілю (доменного, приватного, загальнодоступного).
Гаутам Джайн

2
Примітка до самостійної роботи: Якщо вам заборонено доступ, запустіть Visual Studio як адміністратора .
nVentimiglia

3
Станом на VS2015 розташування файлу є C:\<Path\To\Solution>\.vs\config\applicationhost.config. (Спасибі, @Talon)
снодійний

29

Я також витрачав години на цю проблему, намагаючись перейти зі свого Android Xoom до моєї машини Dev Win7, щоб я міг протестувати новий створений веб-додаток asp.net. Все, що я зробив - це змінити IISExpress 'applicationhost.config з використання ПК HostName на поточну IP-адресу ПК для мого нового сайту.

<binding protocol="http" bindingInformation="*:80:dev-Lee" />

до

<binding protocol="http" bindingInformation="*:80:192.168.1.102" /> 

Як тільки я це зробив і перезапустив IISExpress ... Мені вдалося перейти до моєї машини Dev-Lee і побачити свій додаток від мого Xoom!


10
Все, що я отримую з усіма цими рішеннями, - це помилка 400 - поганий запит. Будь-які пропозиції?
Krumelur

2
@Krumelur, переконайтесь, що ви відредагували правильний файл applicationhost.config. той у папці Мої документи.
Кодлер

14

Ми можемо додати кілька прив'язних адрес, редагуючи applicationhost.config IIS Express

<bindings>
   <binding protocol="http" bindingInformation="*:62217:localhost" />
   <binding protocol="http" bindingInformation="*:62217:192.168.0.5" />
   <binding protocol="http" bindingInformation="*:62218:192.168.0.5" />
</bindings>

Тепер ми можемо отримати доступ до веб-сайту з LAN за допомогою IP-адреси.

Доступ до місцевих сайтів з Лана за допомогою IIS Express


6

Visual Studio 2013 SP1 і новіші версії (2015) включає налаштування "Застосувати налаштування сервера до всіх користувачів (зберігати у файлі проекту)". Це ввімкнено за замовчуванням. Якщо ввімкнено, Visual Studio запускає IIS Express з аргументами командного рядка, за допомогою яких використовується інший файл конфігурації. Розташування файлу 'applicationhost.config' знаходиться в каталозі проекту в '.vs \ config'.


1
Так, у цій справі була проблема - я спробував редагувати неправильний файл. Як це відбувається, ви можете побачити, де знаходиться конфігурація програми IIS Express, натиснувши на піктограму лотка, перерахувавши всі додатки та вибравши свій. Шлях до конфігураційного файла буде записаний нижче. Мій був у .vs \ config
evilkos

1
Так, для мене те саме. Велике спасибі.
Вас

2

Ми зробили безкоштовне розширення VS (2012, 2013, 2015) під назвою Конвеєр, що дозволяє це - ви можете знайти його через меню Інструменти-> Розширення ... в VS або на сайті галереї https://visualstudiogallery.msdn.microsoft. com / a429dbb7-a982-4541-b401-934375c02c0f? SRC = Головна


1
Це геніально і так легко налаштувати. Дякую за роботу!
Powellellogram

1

Якщо ви працюєте з Visual Studio, виконайте наступні дії, щоб отримати доступ до IIS-Express через IP-адресу:

  1. Отримайте свій IP-адресу хоста: ipconfigу командному рядку Windows
  2. GoTo $ (SolutionDir) .vs \ config \ applicationHost.config
  3. Знайдіть
    <site name="WebApplication3" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Users\user.name\Source\Repos\protoype-one\WebApplication3" /> </application> <bindings> <binding protocol="http" bindingInformation="*:62549:localhost" /> </bindings> </site>
  4. Додайте: за <binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
    допомогою IP-адреси
  5. Запустіть свою Visual Studio з правами адміністратора, і все має працювати
  6. Можливо, пошукайте деякі проблеми з брандмауером, якщо ви намагаєтесь підключитися віддалено

Річ у тому, що Visual Studio отримав власний файл applicationHost.config!


0

У мене було багато проблем з тим, щоб це працювати в візуальній студії 2012, я перейшов від 404 помилок до 503 помилок. Врешті-решт те, що для мене спрацювало, було стерти всю пов’язану конфігурацію в конфігурації IIS Express ...

"\Program Files (x86)\IIS Express\appcmd.exe" list site
"\Program Files (x86)\IIS Express\appcmd.exe" delete site xxx
"\Program Files (x86)\IIS Express\appcmd.exe" delete site yyy

Тоді я створив новий віртуальний каталог зі сторінки властивостей у своєму веб-проекті в VS, але перед тим, як створити віртуальний каталог, я змінив ім'я хоста на http: // myhost: 80 /, а потім натиснув кнопку створення віртуального каталогу. Раніше я отримував помилки, кажучи, що ім'я хоста повинно бути "localhost", але цього разу цього не було. А після цього це спрацювало.

Коротше кажучи, спочатку очистіть існуючий конфігурацію та запустіть заново.


-2

Якщо у вас зовнішній домен "name.mydyndns.com", вам потрібно написати:

<binding protocol="http" bindingInformation="*:name.mydyndns.com" />

Це працює на Windows 2003 Server та IIS 7.5 Express.


-3

Знімок екрана

у пулі додатків на IIS встановіть "Увімкнути 32-бітні програми" на "вірно".


Не впевнений, що це насправді вирішення питання. Ви мали на увазі опублікувати це з іншого питання?
ckittel
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.