Добавление IIS UrlRewrite, кажется, прерывает отладку на локальном сервере IIS - PullRequest
10 голосов
/ 14 марта 2011

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

Я использую локальный 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-перезаписи из других проектов, но пока безуспешно)
Запуск проекта без отладки работает идеально и не обнаруживает никакихошибка!

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

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

* 1027.* Я также попробовал несколько других комбинаций настроек, например, включил 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 разных компьютерах)

Ответы [ 6 ]

18 голосов
/ 04 октября 2011

При запуске 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>

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

3 голосов
/ 18 августа 2011

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

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

2 голосов
/ 15 марта 2016

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

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

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

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

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

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

2 голосов
/ 13 июля 2011

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

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

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

0 голосов
/ 05 апреля 2017

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

0 голосов
/ 14 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...