Добавление IIS UrlRewrite, похоже, нарушает отладку на локальном сервере IIS

Эта проблема сводит меня с ума: я работал над недавно созданным проектом, и внезапно мне не удалось отладить этот конкретный проект.

Я использую локальный IIS 7.5 с модулем IIS UrlRewrite 2. Моя машина для разработки - это Windows 7 x64 с Visual Studio 2010 Professional.

Отладка в других проектах все еще работает. Я установил запись в локальном IIS и начинаю отладку своих проектов ASP.net 4.0 в моем локальном IIS.
Мне удалось отследить проблему отладки до неожиданного поведения с помощью модуля URL Rewrite 2 и воспроизвести проблема с недавно созданным проектом веб-приложения 4.0:

После добавления простого правила перезаписи URL с помощью административного конструктора в IIS я не могу начать отладку, потому что получаю сообщение об ошибке

Unable to start debugging on the web server. Could not start ASP.Net debugging.  
More information may be available by starting the project without debugging.

(Я также пробовал копировать настройки URL-Rewrite из других проектов, пока безуспешно)
Запуск проекта без отладки работает отлично и не выявляет никаких ошибок!

Помимо этого, я добавил только несколько символов в текст по умолчанию файла default.aspx.

Настройки сайта в IIS:
- Я создал новый сайт, назначил привязку (какой порт не имеет значения, например, я попробовал порт 86), как всегда.
- Я установил идентификацию пользователя во вновь созданном пуле приложений на "networkservice"
- Установите версию платформы только что созданного пула приложений на "4.0"
- Я дал пользователю "networkservice" полные права доступа к каталогу в каталог решений

Я также пробовал несколько других комбинаций настроек, таких как включенная WindowsAuthentification, FormsAuthentication и так далее. Пока безуспешно.

Это веб-вкладка проекта:
Серверы: используйте локальный веб-сервер IIS, URL-адрес проекта "http: // localhost: 86 /" (я также пробовал использовать "http: // localhost: 86 ", похоже, без разницы)

Что здесь происходит? Я схожу с ума здесь. Есть какие нибудь идеи как это починить? (Не использовать модуль UrlRewrite 2.0 - это не вариант)

И, наконец, web.config:

<?xml version="1.0" encoding="UTF-8"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
  <connectionStrings>
    <add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient" />
  </connectionStrings>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />

    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
    </authentication>

    <membership>
      <providers>
        <clear />
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>

    <profile>
      <providers>
        <clear />
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
      </providers>
    </profile>

    <roleManager enabled="false">
      <providers>
        <clear />
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>

  </system.web>

  <system.webServer>
     <modules runAllManagedModulesForAllRequests="true" />
        <rewrite>
            <rules>
                <rule name="LowerCaseRule1" stopProcessing="true">
                    <match url="[A-Z]" ignoreCase="false" />
                    <action type="Redirect" url="{ToLower:{URL}}" />
                </rule>
            </rules>
        </rewrite>
  </system.webServer>
</configuration>

Обновление: очевидно, я могу отлаживать с помощью ActionType = "Rewrite", но не с помощью ActionType = "Redirect". Тем не менее, по-прежнему нет реального варианта, потому что я хочу, чтобы эта проблема была исправлена ​​в первую очередь, а не пыталась найти какое-то обходное решение. Я бы очень хотел предложить вознаграждение прямо сейчас, но система меня не позволяет.

Кто-нибудь может воспроизвести мои шаги? (Пока я получил это на 2 разных компьютерах)


person citronas    schedule 14.03.2011    source источник
comment
Здесь та же проблема. Не могу найти решения.   -  person Lieven Cardoen    schedule 13.07.2011
comment
@Lieven Cardoen: Я опубликовал код для web.config, который должен помочь. Не стесняйтесь голосовать за;)   -  person citronas    schedule 13.07.2011


Ответы (6)


Visual Studio при запуске (по какой-то причине) попытается получить доступ к URL-адресу:

/debugattach.aspx

Если у вас есть правило перезаписи, которое перенаправляет (или иным образом перехватывает), скажем, .aspx файлы в другое место, вы получите эту ошибку. Решение состоит в том, чтобы добавить этот раздел в начало раздела web.config <system.webServer>/<rewrite>/<rules>:

<rule name="Ignore Default.aspx" enabled="true" stopProcessing="true">
    <match url="^debugattach\.aspx" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
    <action type="None" />
</rule>

Это обеспечит перехват этого одного конкретного запроса, ничего и, что наиболее важно, остановит выполнение, так что ни одно из других ваших правил не будет выполнено. Это надежное решение, поэтому не стесняйтесь сохранять его в своем файле конфигурации для производства.

person Kirk Woll    schedule 04.10.2011
comment
Успешно справился. Я переписал старые файлы .asp, но забыл написать .asp$, и это сводило меня с ума - person Zac; 16.09.2015
comment
Для меня мне пришлось использовать шаблон debugattach.aspx, я не уверен, почему путь не начинался с него, и я не пытался $ хотя бы ограничить его концами, но я сомневаюсь, что столкнусь здесь так или иначе. - person starlight54; 22.08.2017

Я только что обнаружил, что если URL-адрес проекта, который вы используете (щелкните свой проект правой кнопкой мыши, перейдите в «Свойства», щелкните вкладку «Интернет» слева), запускает ваше правило перезаписи, то отладка с использованием кнопки воспроизведения не будет работать. «Исправление» состоит в том, чтобы просто установить URL-адрес вашего проекта на тот, который не будет перезаписан.

Например, я использую перезапись URL, чтобы убедиться, что HTTP-запросы перенаправляются на HTTPS. Пока URL-адрес моего проекта начинается с https: //, у меня нет проблем с отладкой (кроме того факта, что мне нужно установить сертификат SSL на мою машину разработки, но это легко обойти).

person Doug    schedule 17.08.2011
comment
Обновление: я только что прочитал ответ Citronas немного ближе, и, вероятно, поэтому необходимо добавить условие, потому что оно предотвращает срабатывание правила каждый раз. - person Doug; 18.08.2011
comment
В Visual Studio 2015 у меня было правило, соответствующее Default.aspx, и я получал, что 80004005 не мог начать отладку при нажатии кнопки отладки. В свойствах веб-проекта я выбрал конкретную страницу для действия при запуске. Когда я изменил его на Current Page, я мог отлаживать без ошибок. - person jaycer; 31.10.2016

Проблема в том, что все файлы будут вынуждены использовать правило, если только они явно не исключены условием. У меня поблизости нет исходного кода, но я думаю, это помогло:

  <conditions>
    <add input="{URL}" matchType="Pattern" pattern="^.+\.((axd)|(js)|(xaml))$" ignoreCase="true" negate="true"/>
  </conditions>

Запись LowerCaseRule должна выглядеть так:

<rule name="LowerCaseRule1" enabled="true" stopProcessing="true">
  <match url="[A-Z]" ignoreCase="false"/>
  <conditions>
    <add input="{URL}" matchType="Pattern" pattern="^.+\.((axd)|(js)|(xaml))$" ignoreCase="true" negate="true"/>
  </conditions>
  <action type="Redirect" url="{ToLower:{URL}}"/>
</rule> 
person citronas    schedule 13.07.2011
comment
@ Артур Мустафин: Что ты имеешь в виду под слишком эгоистичным? Я предполагаю, что вы тот, кто проголосовал против этого вопроса. Хотите прокомментировать, почему? Почему должно быть эгоистичным отвечать на собственный вопрос после того, как он нашел решение? - person citronas; 05.10.2011
comment
@Artur Я думаю, он мог иметь в виду, что ваше выражение Regex - «Жадный»;) - Смотрите, Остерегайтесь Жадности! здесь: ссылка :)) - person Anthony Walsh; 13.01.2012

У меня была такая же проблема. Я не мог запустить свой проект для отладки в визуальной студии. Я выполнил несколько инструкций, которые вы дали.

Прежде всего, мне нужно было создать правило, чтобы игнорировать страницу /debugattach.aspx, как сказал @Kirk Woll.

Во-вторых, я должен был следовать инструкциям Дуга. Мой проект был направлен на запуск действия через страницу index.aspx, и мое правило создано для удаления расширения aspx. Итак, изменение стартовой страницы на уже отформатированную (без .aspx) сработало отлично.

Пс. 1: В моем проекте более 5 правил, я изолировал одно за другим, чтобы определить, какое правило вызывает проблему, и я понял, что правилом, которое вызывало проблему, было правило, которое удаляет расширение aspx.

Пс. 2: Даже исправляя стартовую страницу проекта, она все равно не работает, она сработала только тогда, когда я добавил правило, игнорирующее страницу /debugattach.aspx.

Пс. 3: Мне не пришлось менять ни одно из моих правил, чтобы соответствовать некоторому шаблону, который я должен игнорировать

person Otta Augusto    schedule 15.03.2016

У меня возникла эта проблема, и решение состояло в том, чтобы добавить имя хоста в привязки сайта в IIS, а затем изменить URL-адрес проекта с http на https.

person Eric    schedule 05.04.2017

У меня была аналогичная проблема с VS 2010, IIS 7 и URLRewriter 2, и я нашел обходной путь - хотя, надеюсь, кто-то опубликует для вас реальное решение.

Вы можете присоединить отладчик к процессу IIS и выполнить отладку следующим образом: 1. В Visual Studio нажмите «Отладка»> «Начать без отладки» 2. Установите точку останова 3. Нажмите «Отладка»> «Присоединиться к процессу».
3. Отметьте «Показать процессы» во всех сессиях ". 4. Выделите w3wp.exe (рабочий процесс iis) и нажмите «Присоединить» 5. В браузере перейдите по URL-адресу, который приведет к срабатыванию точки останова 6. В Visual Studio код должен быть приостановлен в точке останова и вы можете пройти как обычно.

person Paul Schurr    schedule 14.03.2011
comment
Я выполнил все ваши шаги, но кнопка «Прикрепить» остается неактивной: - | - person citronas; 14.03.2011
comment
вы используете Visual Studio как администратор? - person Paul Schurr; 15.03.2011