4 votes

ELMAH ne se connecte pas dans ASP.NET MVC 2

Je n'arrive pas à comprendre ce que je fais de travers, j'essaie d'utiliser ELMAH dans mon application MVC 2 et il n'enregistre rien, jamais.

Voici ce que j'ai dans mon web.config (parties pertinentes)

<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>

<elmah>
  <security allowRemoteAccess="0" />
  <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ELMAH.SqlServer" />
  <!-- 
  <errorMail from="youremail@example.com" to="youremail@example.com" cc="" subject="Elmah Error" async="true" smtpPort="25" smtpServer="[EmailServerName]" userName="" password="" />
  <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" />
  -->
</elmah>

<connectionStrings>
  ...
  <add
      name="ELMAH.SqlServer"
      connectionString="data source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ELMAH_Logging.mdf;Integrated Security=SSPI;Connect Timeout=30;User Instance=True;"
      providerName="System.Data.SqlClient"/>
</connectionStrings>  

<system.Web>
   <httpHandlers>
      <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
      ...
    </httpHandlers>
    <httpModules>
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
      ...
    </httpModules>
</system.Web>

<system.webServer>
   <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
    </modules>
    <handlers>
      <add name="Elmah" verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah"/>
      ...
    </handlers>
</system.webServer>

Ensuite, en utilisant le code de DotNetDarren.com mais quoi que je fasse, aucune exception n'est jamais enregistrée ?

5voto

Mulki Points 1964

Elmah échoue silencieusement s'il ne peut pas enregistrer les erreurs... Revérifiez toutes vos chaînes de connexion utilisées par elmah, vous pourriez y trouver des problèmes.

Voici la table script utilisée pour créer la table DB

CREATE TABLE [dbo].[ELMAH_Error](
    [ErrorId] [uniqueidentifier] NOT NULL,
    [Application] [nvarchar](60) NOT NULL,
    [Host] [nvarchar](50) NOT NULL,
    [Type] [nvarchar](100) NOT NULL,
    [Source] [nvarchar](60) NOT NULL,
    [Message] [nvarchar](500) NOT NULL,
    [User] [nvarchar](50) NOT NULL,
    [StatusCode] [int] NOT NULL,
    [TimeUtc] [datetime] NOT NULL,
    [Sequence] [int] IDENTITY(1,1) NOT NULL,
    [AllXml] [varchar](max) NOT NULL,
 CONSTRAINT [PK_ELMAH_Error] PRIMARY KEY NONCLUSTERED 
(
    [ErrorId] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET ANSI_PADDING OFF
GO

ALTER TABLE [dbo].[ELMAH_Error] ADD  CONSTRAINT [DF_ELMAH_Error_ErrorId]  DEFAULT (newid()) FOR [ErrorId]

0voto

Paul Hadfield Points 3650

Je ne sais pas si cela peut vous aider, mais je viens de rencontrer le même problème lors de ma première tentative d'intégrer ELMAH à mon site. Tout d'abord, je ne pouvais même pas voir l'écran d'erreur, ensuite, une fois que j'avais réglé cela, aucune erreur n'était signalée. Ces deux problèmes étaient dus à des sections manquantes de système.WebServer . J'utilise un site MVC3.0 (récemment converti de 2.0). La seule différence que je vois entre ma configuration et la vôtre est que vous n'avez pas preCondition="integratedMode" dans votre section handlers de system.WebServer (voir ci-dessous). Peut-être est-ce là la cause de vos problèmes ?

<handlers>
   <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
</handlers>

EDITAR

Désolé que mon idée initiale n'ait pas été utile, mais j'ai juste quelques idées supplémentaires :

  1. Quelle version d'ELMAH avez-vous téléchargée (x86 ou x64 ?) et pour quelle version de CPU construisez-vous ? Avez-vous essayé de configurer votre CPU de construction pour la même version que celle que vous avez téléchargée.
  2. Avez-vous une gestion "OnError" dans votre global.asax, si c'est le cas, que se passe-t-il si vous la supprimez ?
  3. Enfin, avez-vous essayé de construire un projet MVC vide sans rien d'autre qu'ELMAH pour vous assurer que vous pouvez l'enregistrer correctement.

0voto

w0rd-driven Points 712

Je dois me faire l'écho de la condition préalable de Paul, mais j'ai également preCondition="managedHandler" sous la section des modules pour chaque entrée.

J'utilise également allowRemoteAccess="1" sous le groupe de sécurité d'elmah, mais j'ai verrouillé le chemin pour que seuls les utilisateurs authentifiés au niveau administrateur puissent accéder à la page via l'appel au contrôleur.

J'ai remarqué que l'entrée du journal d'erreur XML était commentée. Cela fonctionne-t-il en mode XML plutôt qu'en mode SQL ? Je sais que lorsque j'ai commencé, j'ai dû travailler en mode XML jusqu'à ce que je résolve les problèmes de chaîne de connexion et de schéma de base de données que je rencontrais.

Vous pourriez également rencontrer des problèmes de confiance totale/moyenne en fonction du déploiement, mais je pense que vous obtenez des exceptions de la part d'elmah dans ces situations. Avez-vous essayé de consulter le journal des événements sur la machine ? Cela m'a également aidé à surmonter les difficultés de croissance que j'ai rencontrées lors de la mise en place.

Enfin, je viens de remarquer ceci dans le changelog du 14 janvier : http://code.google.com/p/elmah/source/detail?r=782 pointant vers ELMAH - Filtrer les erreurs 404 qui indique simplement que le module ErrorFilter doit être enregistré en dernier pour que le filtrage fonctionne comme prévu. Vous n'avez pas collé les paramètres de configuration du filtre, donc je doute que cela s'applique, mais l'ordre dans lequel les choses sont enregistrées a apparemment de l'importance, donc il y a peut-être une relation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X