Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sharepoint webpart中的自定义TraceProvider实现引发安全异常_Sharepoint_Logging_Moss_Web Parts - Fatal编程技术网

Sharepoint webpart中的自定义TraceProvider实现引发安全异常

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

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

我已将上述代码包装到名为logging.dll的dll中

我正在我的Web部件中引用此DLL

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

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

但是,当我尝试将Web部件添加到页面时,会出现一个安全异常,消息为“Request failed”。当构造函数尝试调用RegisterTraceProvider方法时,会在构造函数中抛出此错误

我是不是遗漏了什么?我怎样才能让这个日志工作


编辑:我的日志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中。我还是有例外。