2013-05-06 54 views
2

我遇到了一个似乎很常见的问题,但我搜索了类似的问题,但似乎没有任何更新,因此我希望有人可以在此提出建议。我不能让ELMAH在我的mvc4应用程序中工作,一旦部署到Azure网站,而在我的开发环境本地工作时,它工作正常。Elmah.Mvc在部署到Azure时未登录MVC4应用程序

下面是详细信息:如报告页面

1)我创建了一个网页MVC4互联网应用程序,并增加了Elmah.MVC NuGet包到它(ELMAH版本1.2.14706.955) 。

2)I完成了由(1)至我的web.config进行的修改通过添加:

  • 的appSettings

    <添加关键= “elmah.mvc.disableHandler”值= “假”/> <添加关键= “elmah.mvc.disableHandleErrorFilter” 值= “假”/> <添加关键= “elmah.mvc.requiresAuthentication” 值= “真”/> <添加关键= “elmah.mvc.al lowedRoles” VALUE = “管理员”/> <添加键= “elmah.mvc.route” 值= “ELMAH”/>

  • ELMAH

    <安全allowRemoteAccess = “真”/ > <错误日志类型= “Elmah.SqlErrorLog,ELMAH” 的connectionStringName = “DefaultConnection”/>

DefaultConnection字符串是 “标准” 的SqlServer STR如:

<add name="DefaultConnection" connectionString="Server=tcp:servername.database.windows.net,1433;Database=dbname;User ID=username;Password=password;Trusted_Connection=False;Encrypt=True;Connection Timeout=30;" providerName="System.Data.SqlClient" /> 

现在,当工作本地未处理的异常登录到数据库。在Azure上部署时会引发异常,但没有任何内容记录到(Azure SQL)数据库中。

我可以在本地和远程成功地遵循mywebsite/elmah路由:只有当我尝试远程路由时,elmah生成的视图显示没有记录,因为没有任何内容存储在数据库中。

相同的远程数据库用于用户帐户和所有其他用途,所以我可以确定Web应用程序可以与数据库交谈。简而言之,在Azure上部署后,不会有任何例外记录。

我创建ELMAH表和存储的特效用下面的SQL:

CREATE TABLE [dbo].[ELMAH_Error] 
(
    [ErrorId]  UNIQUEIDENTIFIER NOT NULL, 
    [Application] NVARCHAR(60) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [Host]  NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [Type]  NVARCHAR(100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [Source]  NVARCHAR(60) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [Message]  NVARCHAR(500) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [User]  NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL, 
    [StatusCode] INT NOT NULL, 
    [TimeUtc]  DATETIME NOT NULL, 
    [Sequence] INT IDENTITY (1, 1) NOT NULL, 
    [AllXml]  NTEXT COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL 
) 
GO 

ALTER TABLE [dbo].[ELMAH_Error] WITH NOCHECK ADD 
    CONSTRAINT [PK_ELMAH_Error] PRIMARY KEY NONCLUSTERED ([ErrorId]) 
GO 

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

CREATE NONCLUSTERED INDEX [IX_ELMAH_Error_App_Time_Seq] ON [dbo].[ELMAH_Error] 
(
    [Application] ASC, 
    [TimeUtc]  DESC, 
    [Sequence]  DESC 
) 
GO 

/* ------------------------------------------------------------------------ 
     STORED PROCEDURES              
    ------------------------------------------------------------------------ */ 

SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_NULLS ON 
GO 

CREATE PROCEDURE [dbo].[ELMAH_GetErrorXml] 
(
    @Application NVARCHAR(60), 
    @ErrorId UNIQUEIDENTIFIER 
) 
AS 

    SET NOCOUNT ON 

    SELECT 
     [AllXml] 
    FROM 
     [ELMAH_Error] 
    WHERE 
     [ErrorId] = @ErrorId 
    AND 
     [Application] = @Application 

GO 
SET QUOTED_IDENTIFIER OFF 
GO 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_NULLS ON 
GO 

CREATE PROCEDURE [dbo].[ELMAH_GetErrorsXml] 
(
    @Application NVARCHAR(60), 
    @PageIndex INT = 0, 
    @PageSize INT = 15, 
    @TotalCount INT OUTPUT 
) 
AS 

    SET NOCOUNT ON 

    DECLARE @FirstTimeUTC DATETIME 
    DECLARE @FirstSequence INT 
    DECLARE @StartRow INT 
    DECLARE @StartRowIndex INT 

    SELECT 
     @TotalCount = COUNT(1) 
    FROM 
     [ELMAH_Error] 
    WHERE 
     [Application] = @Application 

    -- Get the ID of the first error for the requested page 

    SET @StartRowIndex = @PageIndex * @PageSize + 1 

    IF @StartRowIndex <= @TotalCount 
    BEGIN 

     SET ROWCOUNT @StartRowIndex 

     SELECT 
      @FirstTimeUTC = [TimeUtc], 
      @FirstSequence = [Sequence] 
     FROM 
      [ELMAH_Error] 
     WHERE 
      [Application] = @Application 
     ORDER BY 
      [TimeUtc] DESC, 
      [Sequence] DESC 

    END 
    ELSE 
    BEGIN 

     SET @PageSize = 0 

    END 

    -- Now set the row count to the requested page size and get 
    -- all records below it for the pertaining application. 

    SET ROWCOUNT @PageSize 

    SELECT 
     errorId  = [ErrorId], 
     application = [Application], 
     host  = [Host], 
     type  = [Type], 
     source  = [Source], 
     message  = [Message], 
     [user]  = [User], 
     statusCode = [StatusCode], 
     time  = CONVERT(VARCHAR(50), [TimeUtc], 126) + 'Z' 
    FROM 
     [ELMAH_Error] error 
    WHERE 
     [Application] = @Application 
    AND 
     [TimeUtc] <= @FirstTimeUTC 
    AND 
     [Sequence] <= @FirstSequence 
    ORDER BY 
     [TimeUtc] DESC, 
     [Sequence] DESC 
    FOR 
     XML AUTO 

GO 
SET QUOTED_IDENTIFIER OFF 
GO 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 
SET ANSI_NULLS ON 
GO 

CREATE PROCEDURE [dbo].[ELMAH_LogError] 
(
    @ErrorId UNIQUEIDENTIFIER, 
    @Application NVARCHAR(60), 
    @Host NVARCHAR(30), 
    @Type NVARCHAR(100), 
    @Source NVARCHAR(60), 
    @Message NVARCHAR(500), 
    @User NVARCHAR(50), 
    @AllXml NTEXT, 
    @StatusCode INT, 
    @TimeUtc DATETIME 
) 
AS 

    SET NOCOUNT ON 

    INSERT 
    INTO 
     [ELMAH_Error] 
     (
      [ErrorId], 
      [Application], 
      [Host], 
      [Type], 
      [Source], 
      [Message], 
      [User], 
      [AllXml], 
      [StatusCode], 
      [TimeUtc] 
     ) 
    VALUES 
     (
      @ErrorId, 
      @Application, 
      @Host, 
      @Type, 
      @Source, 
      @Message, 
      @User, 
      @AllXml, 
      @StatusCode, 
      @TimeUtc 
     ) 

GO 
SET QUOTED_IDENTIFIER OFF 
GO 
SET ANSI_NULLS ON 
GO 
+0

完整的源代码示例工作任何有关它的最终解决方案? – Kiquenet 2013-11-06 11:12:57

回答

相关问题