使用加密连接字符串配置 ELMAH 和 SQL Server 日志记录

2024-01-01

我正在尝试使用 SQL Server 2008 R2 在 ASP.NET 4 应用程序中配置 ELMAH 错误日志记录。有什么方法可以告诉 ELMAH 在我们提供的连接字符串上调用我们的内部解密函数吗?我需要修改 ELMAH 源并重建吗?

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

<elmah>
  <security allowRemoteAccess="1" />
  <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ELMAH" />
</elmah>

<connectionStrings>
  <add name="ELMAH" connectionString="EncryptedConnectionString" providerName="System.Data.SqlClient" />
</connectionStrings>

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

您不能只是告诉 ELMAH 对您的连接字符串执行某些操作。然而,您可以做的是告诉 ELMAH 在需要时给您回电ErrorLog,让您在运行时拥有更多控制权。然后,您可以读取加密的连接字符串,使用内部函数对其进行解密,并返回用它初始化的 SqlErrorLog。

为此,您需要提供一个与以下兼容的方法 这ServiceProviderQueryHandler http://code.google.com/p/elmah/source/browse/tags/REL-1.2/src/Elmah/ServiceCenter.cs#34代表。定义如下:

public delegate IServiceProvider ServiceProviderQueryHandler(object context); 

该方法的实现必须返回实现该方法的对象的实例IServiceProvider。如果您不想自己编写一个,可以从 .NET Framework 免费获取一个。看。服务提供商的GetService必须响应请求ErrorLog输入,然后您可以,例如,返回SqlErrorLog已使用运行时操作的连接字符串初始化的对象。这是一个可能的实现:

var parent = ServiceCenter.Current;
ServiceCenter.Current = context => { 
    var container = new ServiceContainer(parent(context)); 
    var connectionSettings = ConfigurationManager.ConnectionStrings["FOOBAR"];
    var connectionString = Decrypt(connectionSettings.ConnectionString);
    var log = new SqlErrorLog(connectionString); 
    container.AddService(typeof(ErrorLog), log); 
    return container; 
  } ;

这将捕获当前的服务点并安装您自己的服务点。创建的 lambda/委托在无法传递服务请求时将其传递到捕获的服务点 直接满足它,从而创建一条链。您通过设置告诉 ELMAH 您的实施情况ServiceCenter.Current在应用程序初始化期间的某个位置,因此这就是上面的代码需要所在的位置。

请记住,这是一个非常简单的实现,但它应该足以帮助您入门并在以后需要时进行优化。

在此之前1.2 中的补充 http://code.google.com/p/elmah/issues/detail?id=149,做类似事情的唯一方法需要子类化和其他体操,并且仍然产生部分结果。现在您只需实现一个方法并将其交给 ELMAH,该方法只需根据对象的服务类型响应 ELMAH 对对象的查询。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用加密连接字符串配置 ELMAH 和 SQL Server 日志记录 的相关文章

随机推荐

  • 在 tkinter 中显示网格布局单元

    有没有trick使用它时显示网格布局单元格 或单元格的边框 以便直观地了解幕后发生的情况 我已经搜索了一点 但还没有找到任何东西 如果您为包含框架指定颜色 并使用选项在单元格之间放置填充 则背景将通过间隙渗透 这只适用于有小部件的地方 如果
  • Ktor 中的表单身份验证

    我是新来的Kotlin and Ktor试图查看身份验证部分 所以我得到了以下代码 路由 和 bye 工作正常 但路由 login 给出空白页面 package blog import kotlinx html import kotlinx
  • Opencv 矩阵元素的列和

    我需要分别计算所有列中元素的总和 现在我正在使用 矩阵 cross corr 应该被求和 Mat cross corr summed for int i 0 i
  • /vagrant挂载后如何运行nginx.service

    我想做的事 我正在尝试使 nginx 加载配置 vagrant由vagrant自动安装 所以我编辑了 nginx service 使其在安装共享文件夹后启动 但它不起作用 当然nginx是在virtualbox guest utils se
  • 常量正确性可以提高性能吗?

    我已经多次读到 在 C 或 C 代码中强制 const 正确性不仅是可维护性方面的良好实践 而且还可以允许编译器执行优化 然而 我也读到了完全相反的内容 它根本不会影响性能 因此 您是否有示例表明 const 正确性可以帮助您的编译器提高程
  • 使用 Intent 的 android.content.ActivityNotFoundException

    我正在编写一个应用程序 在其中尝试发送包含一些数据的电子邮件 但是每当我单击 提交 按钮发送电子邮件时 getting 不幸的是应用程序已停止 Error android content ActivityNotFoundException
  • CRAN 软件包依赖于 Bioconductor 软件包安装错误

    我管理描述文件的依赖 建议和导入 最后我将我的包裹提交给CRAN 但是在安装包的过程中 它只安装存放在下面的包CRAN不是为了bioconductor包 此外 它在 Mac OS 上有一个包依赖错误 检查 Mac 操作系统的日志 http
  • 如何基于Gemfile.lock安装gems(不带Gemfile)

    通常 人们会使用bundle install安装宝石 但它需要 Gemfile 和 Gemfile lock 可选 我的情况有点不同 我只有 Gemfile lock 那么我怎样才能安装所有这些基于bundle命令 I tried bund
  • 已弃用的方法“startActivityForResult()”与正确的蓝牙设置

    嘿 我尝试根据官方android开发网站上的信息制作蓝牙服务 但我遇到了不推荐使用的方法 startActivityForResult 我应该怎么做才能正确打开蓝牙设备 这是我的代码 其中包含已弃用的方法 private void enab
  • 为什么 C++20 中不推荐使用 std::is_pod?

    std is pod在 C 20 中已弃用 这样选择的原因是什么 我应该用什么来代替std is pod知道一个类型是否真的是一个 POD POD 正在被两个类别所取代 这两个类别提供了更多细微差别 这2017年11月c 标准会议 http
  • 如何生成线程安全的统一随机数?

    我的程序需要生成某个范围内的许多随机整数 int min int max 每次调用都会有一个不同的范围 什么是一个好的 最好是线程安全的 方法来做到这一点 以下不是线程安全的 并且使用 rand 人们似乎不鼓励这样做 int intRand
  • NSToolbar:如何初始化所选项目?

    我有一个 Mac OS 应用程序 带有一个带有 NSToolbar 的首选项窗口 我的下面还有一个自定义子视图 当用户单击其中一个选项时 会在第一个视图中加载其他 3 个自定义视图 到目前为止 一切都很好 现在我意识到加载窗口时默认情况下不
  • TSQL - 递归 CTE 效率低下 - 需要替代方案

    这是包含示例数据的表格 DECLARE TestTable TABLE ItemID INT A INT B INT Month INT INSERT INTO TestTable VALUES 1234 5 9 1 INSERT INTO
  • Android Studio 4.0.2 Gradle 错误:未为属性“enableGradleWorkers”指定任何值

    我在用Android Studio 4 0 2我收到错误 No value has been specified for property enableGradleWorkers 发生这种情况是因为crashlytics gradle 插件
  • “致命错误:在第 48 行调用 /usr/bin/phpunit 中未定义的方法 PHPUnit_Util_Filter::addfiletofilter()”

    我刚刚在 Ubuntu Linux 服务器上使用 PEAR 安装了 phpunit Linux mccoy 2 6 28 11 server 42 Ubuntu SMP 周五 4 月 17 日 02 45 36 UTC 2009 x86 6
  • Android 从图库中获取图像是旋转的

    我试图让用户从图库中选择个人资料图片 我的问题是有些图片向右旋转 我像这样启动图像选择器 Intent photoPickerIntent new Intent photoPickerIntent setType image photoPi
  • 填充在 Safari 和 IE 中的选择列表中不起作用

    有谁知道为什么我的 Safari 不在选择列表中填充 在 FF 中运行良好 请告诉我该怎么做 文档类型有问题吗 code
  • Datasnap:有没有办法检测全局连接丢失?

    我正在寻找检测本地连接丢失的情况 是否有办法做到这一点 就像 Corelabs 组件上的事件一样 Thanks 编辑 抱歉 我会尝试更具体 我目前正在使用 datasnap 2009 设计一个原型 所以我有一个瘦客户端 一个无状态服务器应用
  • BeautifulSoup 未提取所有 html

    我们正在尝试从 Forever 21 网站的此页面获取产品网址 由于某种原因 BeautifulSoup 没有获取类为 item pic 的元素 即使它们位于站点 html 中 我们尝试过使用 requests mechanize sele
  • 使用加密连接字符串配置 ELMAH 和 SQL Server 日志记录

    我正在尝试使用 SQL Server 2008 R2 在 ASP NET 4 应用程序中配置 ELMAH 错误日志记录 有什么方法可以告诉 ELMAH 在我们提供的连接字符串上调用我们的内部解密函数吗 我需要修改 ELMAH 源并重建吗