2009-10-06 4 views
1

Я создал фильтр ISAPI. Он отлично работает на сервере разработки и сервере SIT.Авария фильтра ISAPI IIS

Но на рабочем сервере это не работает.

В окне просмотра событий следующего журнал:

отчетов в очередь сообщения об ошибке: Ошибка приложения w3wp.exe, версия 6.0.3790.2825, модуль разломообразовании MSVCR80.DLL, версии 8.0.50727.3053, адрес ошибки 0x00046039.

ответ

1

Ну, здесь нет достаточной информации, чтобы рассказать, что происходит. То, что вам действительно нужно понять, - это то, что создает проблемы. Хороший старый Debugging Tools for Windows - ваш друг здесь. Если вы не знакомы с использованием отладчика, тогда вам будут полезны инструменты, такие как ADPlus и Debug Diag. Вы также можете проверить Tess Ferrandez's Blog, который является отличным ресурсом, если вы ищете консультацию по отладке в IIS.

Возможно, что у манжеты может быть что-то недопустимое указатель на одну из функций C-runtime. Используя отладчик, вы должны определить, что это за функция и какие передаваемые аргументы. Надеемся, что с этой информацией вы сможете выяснить, что происходит.

+0

Тот же самый DLL-фильтр (ISAPI-фильтр) отлично работает в среде разработки (winxp) и среде SIT (Windows Server 2003), но не в производственной среде (Windows Server 2003). Кроме того, мы не сможем установить что-либо на рабочем сервере) Есть ли другой способ решить эту проблему? – 2009-10-06 12:29:59

+0

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

+0

Тесс камни! ... также старые статьи Дэвида Ванга также являются драгоценными камнями. К сожалению, он больше не блогов :( – Kev

0

Вы должны уметь присоединяться к процессу и отлаживать его с помощью визуальной студии. Вы можете использовать Process Explorer, чтобы выяснить, какой процесс w3wp.exe запускает вашу dll и средство удаленной отладки, чтобы вы могли отлаживать код на другом компьютере.

1

При столкновении с этой проблемой я захватил Jochen Klambach's StackWalker из CodeProject. Обновление:StackWalker has now graduated to Codeplex. Определенно получить выпуск кода; он содержит несколько обновлений и исправлений.

Он выведет стек для вашего кода при сбое фильтра.

То, как я сделал это было так: в OnAuthComplete в моем фильтре, который где мой фильтр делает всю работу, я окружил логику попробовать ... кроме того:

__try 
{ 
    dwRetval = DoRewrites(...); 
} 
__except (ExcFilter(GetExceptionInformation())) 
{ 
} 

А потом, ExcFilter определяется следующим образом:

extern "C" int ExcFilter(EXCEPTION_POINTERS *pExp) 
{ 
    MyLoggingStackWalker *sw = new MyLoggingStackWalker(); 
    sw->ShowCallstack(GetCurrentThread(), pExp->ContextRecord); 
    return EXCEPTION_CONTINUE_SEARCH; // allow the process to crash 
} 

LoggingStackWalker производный от StackWalker и переопределяет метод OnOutput, чтобы отправить этот вывод в лог-файл. Он также устанавливает путь поиска для файлов PDB для включения каталога, в котором находится DLL.

class MyLoggingStackWalker : public StackWalker 
{ 
public: 
    MyLoggingStackWalker() : StackWalker() 
     { 
      char drive[_MAX_DRIVE]; 
      char dir[_MAX_DIR]; 

      // add the directory for the ISAPI DLL, to the search path for PDB files 
      this->m_szSymPath = (LPSTR) malloc(_MAX_PATH); 
      _splitpath_s(DllLocation, drive, _MAX_DRIVE, dir, _MAX_DIR, NULL, 0, NULL, 0); 
      _makepath_s(this->m_szSymPath, _MAX_PATH, drive, dir, NULL, NULL); 
     } 
    virtual void OnOutput(LPCSTR szText) 
     { 
      LogMessage((char*)szText); 
      StackWalker::OnOutput(szText); 
     } 
}; 

Чтобы продемонстрировать это, я передаю плохой указатель на vscprintf в коде. Вот как выглядит полученная трассировка стека на IIS7. Вы можете видеть, что первые пары кадров находятся в среде выполнения C, с номерами строк. (StackWalker фактически загружает файлы символов с сервера символов MS, если вы используете настройки по умолчанию. Вы можете отключить это, если хотите.) Тогда следующая группа кадров из моего кода. Он определяет местоположение проблемы. Рамки стека после моей - все это модули IIS. Это IIS7 на Vista; Я думаю, что сервер символов не имел символов для этих модулей. В любом случае, поскольку вы можете видеть, что stacktrace не оставляет сомнений относительно того, где проблема.

f:\dd\vctools\crt_bld\self_x86\crt\src\output.c (1068): _output_l 
f:\dd\vctools\crt_bld\self_x86\crt\src\vsprintf.c (405): _vscprintf_helper 
f:\dd\vctools\crt_bld\self_x86\crt\src\vsprintf.c (414): _vscprintf 
c:\dev\isapi\filter\logger.c (193): LogMessage 
c:\dev\isapi\filter\rewriter.c (2036): EvaluateRewrites 
c:\dev\isapi\filter\rewriter.c (789): DoRewrites 
c:\dev\isapi\filter\rewriter.c (955): OnAuthComplete 
c:\dev\isapi\filter\rewriter.c (1139): HttpFilterProc 
60531896 module(filter): (filename not available): (function-name not available) 
60531FAB module(filter): (filename not available): (function-name not available) 
605314E3 module(filter): (filename not available): (function-name not available) 
60531276 module(filter): (filename not available): (function-name not available) 
6D122EA0 module(iiscore): (filename not available): (function-name not available) 
6D123696 module(iiscore): (filename not available): (function-name not available) 
6D12AA4C module(iiscore): (filename not available): (function-name not available) 
6D125D3B module(iiscore): (filename not available): (function-name not available) 
6D1220F4 module(iiscore): (filename not available): (function-name not available) 
6D124EEF module(iiscore): (filename not available): (function-name not available) 
6D12C6B8 module(iiscore): (filename not available): (function-name not available) 
70CB13B3 module(w3dt): (filename not available): UlAtqGetContextProperty 
70CB11DA module(w3dt): (filename not available): (function-name not available) 
71A42611 module(W3TP): (filename not available): THREAD_POOL::PostCompletion 
71A42812 module(W3TP): (filename not available): OverrideThreadPoolConfigWithRegistry 
71A41E85 module(W3TP): (filename not available): (function-name not available) 
76A54911 module(kernel32): (filename not available): BaseThreadInitThunk 
7727E4B6 module(ntdll): (filename not available): __RtlUserThreadStart 
7727E489 module(ntdll): (filename not available): _RtlUserThreadStart 
7727E489 module(ntdll): (filename not available): _RtlUserThreadStart 
Смежные вопросы