ELMAH не регистрируется

Я использую ELMAH на своем компьютере для разработки, и он отлично работает. Я также развернул его на Win2008 IIS7 и запустил веб-сайт LOCALHOST с принудительным исключением, и он регистрируется. Однако, когда я пытаюсь просмотреть веб-сайт на другом компьютере (используя другой компьютер из сети для просмотра веб-сайта), ELMAH не регистрируется проверили App_Data на наличие xml и ничего не создали. Я уже даю сетевому сервису разрешение на доступ к папкам.

Итак, проблема заключается в том, что при просмотре веб-сайта в журналах локального хоста ELMAH при просмотре его на другом компьютере он не регистрируется.

Ниже мой файл web.config..

<configuration>
<configSections>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
                <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/>
                <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
            </sectionGroup>
        </sectionGroup>
    </sectionGroup>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah" />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />
    </sectionGroup>
</configSections>

------------------------------- вырезать другие не связанные

<httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
        <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add verb="POST,GET,HEAD" name="Elmah" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
    </httpHandlers>
    <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
            <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
            <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </httpModules>

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="ScriptModule"/>
        <remove name="UrlRoutingModule"/>
        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah"/>
            <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
            <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
    </modules>
    <handlers>
        <remove name="WebServiceHandlerFactory-Integrated"/>
        <remove name="ScriptHandlerFactory"/>
        <remove name="ScriptHandlerFactoryAppServices"/>
        <remove name="ScriptResource"/>
        <remove name="MvcHttpHandler"/>
        <remove name="UrlRoutingHandler"/>
        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
        <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" preCondition="integratedMode" type="Elmah.ErrorLogPageFactory, Elmah" />
    </handlers>
</system.webServer>

person Petrick Lim    schedule 07.07.2010    source источник


Ответы (1)


Когда в прошлом у меня возникали проблемы с ELMAH в производственной среде, обычно это было одно из двух:

1) Каталог, в который я хочу поместить файлы журнала, не создан. 2) Рабочий процесс ASP.NET не имеет разрешения на запись в каталог для сброса.

Вы не опубликовали здесь фактический раздел конфигурации, но я понял из вашего вопроса, что вы делаете что-то вроде этого:

<elmah> 
   <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" /> 
</elmah> 

Если вы используете App_Data, я предполагаю, что эта папка уже существует в вашем каталоге развертывания. Если нет, вам нужно добавить его. Если он есть, попробуйте предоставить учетной записи ASPNET права на запись в этот каталог, если вы еще этого не сделали.

person Brandon Satrom    schedule 07.07.2010
comment
Да, это уже есть в моей конфигурации, и поэтому Elmah правильно регистрируется на локальном хосте. Когда я говорю «локальный хост», я имею в виду не машину для разработки, а производственную среду, elmah регистрирует исключения в рабочей среде, когда я пытался просмотреть веб-сайт в качестве локального хоста в браузере сервера. Но странно то, что он не регистрируется, когда я пытаюсь просмотреть URL-адрес веб-сайта в браузере другого компьютера. Короче говоря, я уже разместил проект на сервере, затем я просматриваю URL-адрес на клиентской машине, и отображается дружественная ошибка, но elmah не регистрируется. Но на сервере, когда я просматриваю locahost, elmah регистрирует это. - person Petrick Lim; 07.07.2010
comment
Кстати, я попробую учетную запись ASPNET. быть я только даю привилегии сетевой службе и смотрю, работает ли что-то. благодаря. - person Petrick Lim; 07.07.2010
comment
Похоже, что это может быть ASPNET, если elmah регистрирует, когда вы просматриваете, когда вы вошли в производственную коробку, но не когда внешние запросы поступают в коробку. Дайте мне знать, если это работает или нет. - person Brandon Satrom; 07.07.2010
comment
Привет, Брэндон, кажется, я понял, почему elmah не регистрируется. Это может быть атрибут [HandleError] в asp.net mvc, который заставляет обрабатывать ошибку из первых рук. таким образом, elmah ничего не поймал. ознакомьтесь с ответом самого Атифа Азиза stackoverflow.com/questions/766610/ - person Petrick Lim; 07.07.2010
comment
Хм, а разве это не будет одинаковым как в разработке, так и в производстве? Дайте мне знать, если это исправит это, мне было бы интересно узнать. - person Brandon Satrom; 08.07.2010
comment
Да, я тоже думаю, что это должно быть последовательно. Но если вы копнете глубже и попытаетесь установить для customError значение remoteOnly в файле web.config, который перенаправит вас на вашу пользовательскую страницу ошибок. Каким-то образом handleerror справляется с этим, и elmah ничего не понимает. в то время как если вы выключили customError, то handleError не перехватывает его, и elmah сигнализируется, тогда вы также получаете недружественное сообщение об ошибке. Вы можете убедиться в этом, прочитав пример Атифа Азиза. - person Petrick Lim; 08.07.2010
comment
Привет, Брэндон, теперь все работает. Чтобы имитировать проблему, украсьте все контроллеры [HandleError] и установите customError=On. С этой настройкой elmah не будет вести журнал. Исправление: я создал новый атрибут ElmahHandleError из кода Атифа Азиза. Теперь работает нормально. Спасибо за интерес, Брэндон. - person Petrick Lim; 08.07.2010
comment
Не для того, чтобы возродить старый ответ, но для меня были проблемы с правами доступа к папкам. Я использую олицетворение для своих приложений, и у учетной записи службы нет разрешения на запись в указанную папку. - person Justin Helgerson; 05.07.2012