Sharepoint webpart中的自定义TraceProvider实现引发安全异常
我正在尝试在我的Web部件中实现一些日志记录。我实现了一个自定义跟踪提供程序实现,它将日志消息写入12个配置单元日志,如下所述: 我已将上述代码包装到名为logging.dll的dll中 我正在我的Web部件中引用此DLL 我正在使用提升的权限调用构造函数中的RegisterTraceProvider 我已在manifest.xml中将日志DLL声明为安全控件 但是,当我尝试将Web部件添加到页面时,会出现一个安全异常,消息为“Request failed”。当构造函数尝试调用RegisterTraceProvider方法时,会在构造函数中抛出此错误 我是不是遗漏了什么?我怎样才能让这个日志工作Sharepoint webpart中的自定义TraceProvider实现引发安全异常,sharepoint,logging,moss,web-parts,Sharepoint,Logging,Moss,Web Parts,我正在尝试在我的Web部件中实现一些日志记录。我实现了一个自定义跟踪提供程序实现,它将日志消息写入12个配置单元日志,如下所述: 我已将上述代码包装到名为logging.dll的dll中 我正在我的Web部件中引用此DLL 我正在使用提升的权限调用构造函数中的RegisterTraceProvider 我已在manifest.xml中将日志DLL声明为安全控件 但是,当我尝试将Web部件添加到页面时,会出现一个安全异常,消息为“Request failed”。当构造函数尝试调用Register
编辑:我的日志DLL和我的Web部件DLL都在GAC中。您的Web部件部署在GAC或Bin文件夹中吗? 如果它在Bin文件夹中,则该Web部件未在完全信任下运行,因此您需要为您的Web部件编写代码访问安全策略,允许它在完全信任下运行对API的调用
例如,请签出或仅使用Google for Sharepoint+代码访问安全策略。您的Web部件是否部署在GAC或Bin文件夹中? 如果它在Bin文件夹中,则该Web部件未在完全信任下运行,因此您需要为您的Web部件编写代码访问安全策略,允许它在完全信任下运行对API的调用
例如,请签出或仅使用Google for Sharepoint+代码访问安全策略。由于跟踪提供程序使用非托管代码,因此应使用以下标记该方法:
[SecurityPermission(SecurityAction.Assert, SecurityPermissionFlag.UnmanagedCode)]
这将确保.NET的安全性在达到该属性时停止在调用堆栈中进一步检查,从而允许不太受信任的代码通过该属性执行非托管调用。请记住,日志记录dll仍然需要运行权限,因此请在manifest.xml中为其提供CAS策略,或将其放入GAC中。如果将其放入GAC中,请使用以下属性对其进行标记,使其可以从非完全受信任的dll调用:
[assembly: AllowPartiallyTrustedCallers]
然后,您应该能够从部署到bin目录的Web部件调用它。由于跟踪提供程序使用非托管代码,您应该用以下代码标记该方法:
[SecurityPermission(SecurityAction.Assert, SecurityPermissionFlag.UnmanagedCode)]
这将确保.NET的安全性在达到该属性时停止在调用堆栈中进一步检查,从而允许不太受信任的代码通过该属性执行非托管调用。请记住,日志记录dll仍然需要运行权限,因此请在manifest.xml中为其提供CAS策略,或将其放入GAC中。如果将其放入GAC中,请使用以下属性对其进行标记,使其可以从非完全受信任的dll调用:
[assembly: AllowPartiallyTrustedCallers]
然后您应该能够从部署到bin目录的Web部件调用它。我在构造函数中执行m RegisterTraceprovider()调用。看来这就是它失败的原因。我将我的RegisterTraceProvider()调用移动到OnInit()覆盖中,它开始工作 我在构造函数中执行m RegisterTraceprovider()调用。看来这就是它失败的原因。我将我的RegisterTraceProvider()调用移动到OnInit()覆盖中,它开始工作 嘿。。谢谢你的帖子,我从中学到了一些东西。但是我的日志DLL和Web部件DLL都在GAC中。我还是有例外。嘿。。谢谢你的帖子,我从中学到了一些东西。但是我的日志DLL和Web部件DLL都在GAC中。我还是有例外。