Отладка модуля http на сервере разработки asp.net

<?php
$url = "http://www.mydomain.com/abc/"; //https://www... http://... https://...
echo substr(parse_url($url)['path'],1,-1); //return abc
?>
10
задан Caveatrob 24 March 2009 в 22:50
поделиться

3 ответа

Можно также хотеть удостовериться, что Вы используете проекты веб-приложения, который является тем, что Вы использовали в VS2003 и не веб-сайте "проекты", которые не являются проектами.

0
ответ дан 3 December 2019 в 16:31
поделиться

Выполните эти шаги для добавления HTTP-модуля:

  1. Создайте новый Visual Studio.NET названный проект Библиотеки классов C# MyModule.
  2. Установите ссылку на System.Web.dll блок.
  3. Добавьте следующую директиву к классу:

    using System.Web;                    
    
  4. Переименуйте класс SyncModule.cs, и затем измените определение класса для отражения этого.

  5. Реализуйте IHttpModule интерфейс. Ваше определение класса должно появиться следующим образом:

    public class SyncModule : IHttpModule                    
    
  6. Решите, на которые события Вы подпишетесь. Следующий список обрисовывает в общих чертах доступные события от HttpApplication возразите, на который можно подписаться:

    • AcquireRequestState: Назовите это событие, чтобы позволить модулю получать или создавать состояние (например, сессия) для запроса.
    • AuthenticateRequest: Назовите это событие, когда модуль безопасности должен аутентифицировать пользователя, прежде чем это обработает запрос.
    • AuthorizeRequest: Назовите это событие модулем безопасности, когда запрос должен будет быть авторизован. Названный после аутентификации.
    • BeginRequest: Назовите это событие, чтобы уведомить модуль, что новый запрос начинается.
    • Disposed: Назовите это событие, чтобы уведомить модуль, что приложение заканчивается по некоторым причинам. Позволяет модулю выполнять внутреннюю очистку.
    • EndRequest: Назовите это событие, чтобы уведомить модуль, что запрос заканчивается.
    • Error: Назовите это событие для уведомления модуля ошибки, которая происходит во время обработки запросов.
    • PostRequestHandlerExecute: Назовите это событие, чтобы уведомить модуль, что обработчик закончил обрабатывать запрос.
    • PreRequestHandlerExecute: Назовите это событие, чтобы уведомить модуль, что обработчик для запроса собирается быть названным.
    • PreSendRequestContent: Назовите это событие, чтобы уведомить модуль, что содержание собирается быть отправленным клиенту.
    • PreSendRequestHeaders: Назовите это событие, чтобы уведомить модуль, что HTTP-заголовки собираются быть отправленными клиенту.
    • ReleaseRequestState: Назовите это событие, чтобы позволить модулю выпускать состояние, потому что обработчик закончил обрабатывать запрос.
    • ResolveRequestCache: Назовите это событие после аутентификации. Кэширование модулей использует это событие, чтобы определить, должен ли запрос быть обработан его кэшем или если обработчик должен обработать запрос.
    • UpdateRequestCache: Назовите это событие после ответа от обработчика. Кэширование модулей должно обновить их кэш с ответом.
  7. Реализуйте методы Init и Dispose интерфейса IHttpModule следующим образом:

    public void Init(HttpApplication app)
    {
       app.BeginRequest += new EventHandler(OnBeginRequest);
    }
    public void Dispose(){ }
    
  8. Создайте делегата к событию следующим образом:

    public delegate void MyEventHandler(Object s, EventArgs e);    
    
  9. Определите частную локальную переменную типа MyEventHandler содержать ссылку на событие:

    private MyEventHandler _eventHandler = null;                    
    
  10. Создайте событие, которое поднимает трубку делегата в методе в файле Global.asax или классе, который наследовался HttpApplication объект:

    public event MyEventHandler MyEvent
    {
       add { _eventHandler += value; }
       remove { _eventHandler -= value; }
    }
    
  11. Создайте OnBeginRequest метод, который сцепляется до BeginRequest событие HttpApplication:

    public void OnBeginRequest(Object s, EventArgs e)
    {
       HttpApplication app = s as HttpApplication;
       app.Context.Response.Write("Hello from OnBeginRequest in custom module.<br>");
       if(_eventHandler!=null)
          _eventHandler(this, null);
    }        
    
  12. Скомпилируйте проект

источник: http://support.microsoft.com/kb/307996

Добавление HTTP-модуля к Вашему web.config посмотрит что-то как следующее:

<system.web>
    <httpModules>
       <add name="CustomHttpModule" type="MyCustomHttpModule"/>
    </httpModules>
</system.web>
11
ответ дан 3 December 2019 в 16:31
поделиться

Две распространенные причины, по которым точки останова не попадают в HttpModule:

Точка останова находится в коде, который вызывается во время создания модуля.

Этот всегда достается мне. Если вы хотите отладить конструкцию модуля , вы должны вручную подключить отладчик . Для этого в Windows 7 (аналогично в Vista):

  1. Debug | Присоединиться к процессу ...
  2. Установите флажок Показать процессы во всех сеансах .
  3. Выберите экземпляр рабочего процесса ( w3wp.exe )
  4. Нажмите Присоединить .

Обновите браузер, и теперь вы должны достичь точки останова.

Модуль фактически не загружается из-за проблемы с конфигурацией.

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

Если это так, убедитесь, что модуль правильно подключен для всех необходимых версий IIS.

Для IIS 5.1 и IIS 6 ...

<system.web>
  <httpModules>
    <add name="CustomHttpModule" type="MyCustomHttpModule"/>
  </httpModules>
</system.web>

... и для IIS 7+

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="CustomHttpModule" type="MyCustomHttpModule"/>
  </modules>
</system.webServer>
8
ответ дан 3 December 2019 в 16:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: