【问题标题】:Custom TraceProvider implementation in webpart throws security exceptionWebpart 中的自定义 TraceProvider 实现引发安全异常
【发布时间】:2010-11-07 17:50:27
【问题描述】:

我正在尝试在我的 webpart 中实现一些日志记录。我实现了一个自定义跟踪提供程序实现,它将日志消息写入 12 个配置单元日志,如下所述:

http://msdn.microsoft.com/en-us/library/aa979522.aspx

我已将上面的代码封装到一个名为 logging.DLL 的 dll 中。

我在我的 webpart 中引用了这个 DLL。

我正在使用提升的权限在构造函数中调用 RegisterTraceProvider。

我已在 manifest.xml 中将 Logging DLL 声明为安全控件。

但是当我尝试将 web 部件添加到页面时,我收到一条安全异常消息“请求失败”。构造函数尝试调用 RegisterTraceProvider 方法时会抛出此错误。

我在这里遗漏了什么吗?我怎样才能让这个日志记录工作?

编辑:我的日志记录 DLL 和我的 webpart DLL 都在 GAC 中。

【问题讨论】:

    标签: sharepoint logging moss web-parts


    【解决方案1】:

    您的 webpart 是否部署在 GAC 或 Bin 文件夹中? 如果它在 Bin 文件夹中,则 Web 部件未在完全信任下运行,因此您需要为您的 Web 部件编写代码访问安全策略,允许它在完全信任下运行对 API 的调用。

    例如,查看 this 或仅在 Google 上查看 Sharepoint + 代码访问安全策略。

    【讨论】:

      【解决方案2】:

      由于跟踪提供程序使用非托管代码,您应该使用以下标记方法:

      [SecurityPermission(SecurityAction.Assert, SecurityPermissionFlag.UnmanagedCode)]
      

      这将确保 .NET 的安全性在达到此属性时停止进一步检查调用堆栈,从而允许不太受信任的代码通过它执行非托管调用。请记住,日志 dll 仍需要运行权限,因此要么在 manifest.xml 中为其提供 CAS 策略,要么将其放入 GAC。如果您将其放入 GAC,请使用以下属性对其进行标记,使其可从非完全受信任的 dll 中调用:

      [assembly: AllowPartiallyTrustedCallers]
      

      那么您应该可以从部署到 bin 目录的 WebPart 调用它。

      【讨论】:

      • 嘿.. 感谢您的帖子,我从中学到了一些东西。但是我的日志 DLL 和我的 webpart DLL 都在 GAC 中。我仍然遇到异常。
      【解决方案3】:

      我正在构造函数中调用 RegisterTraceprovider()。看起来这就是它失败的原因。我将我的 RegisterTraceProvider() 调用移到 OnInit() 覆盖中,它开始工作了!!

      【讨论】:

        猜你喜欢
        • 2010-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多