2009-07-02 4 views
0

Ich versuche, einige Protokollierung in meinem Webpart zu implementieren. Ich implementiert eine benutzerdefinierte Trace-Provider-Implementierung, die Log-Meldungen in die Struktur 12 Protokolle schreibt wie hier beschrieben:Benutzerdefinierte TraceProvider-Implementierung im Webpart löst Sicherheitsausnahme aus

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

ich den obigen Code in eine DLL eingewickelt haben genannt logging.dll.

Ich verweise auf diese DLL in meinem Webpart.

Ich rufe den RegisterTraceProvider im Konstruktor mit erhöhten Rechten.

Ich habe die Logging DLL als eine sichere Kontrolle in der manifest.xml deklariert.

Aber wenn ich versuche, das Webpart der Seite hinzuzufügen, erhalte ich eine Sicherheitsausnahme mit der Nachricht "Anfrage fehlgeschlagen." Dieser Fehler wird im Konstruktor ausgelöst, wenn er versucht, die RegisterTraceProvider-Methode aufzurufen.

Fehle ich hier etwas? Wie kann ich diese Protokollierung zum Laufen bringen?

Edit: Sowohl meine Logging-DLL und meine Webpart-DLL sind in der GAC.

Antwort

0

Ich machte m RegisterTraceprovider() Aufruf innerhalb des Konstruktors. Sieht so aus, als wäre das der Grund, warum es versagte. Ich habe meinen Aufruf von RegisterTraceProvider() in OnInit() überschrieben, und es hat angefangen zu arbeiten !!

1

Ist Ihr Webpart im GAC- oder Bin-Ordner bereitgestellt? Wenn sich das Webpart im Ordner "Bin" befindet, wird das Webpart nicht unter "Vollständige Vertrauensstellung" ausgeführt. Sie müssen daher eine Codezugriffs-Sicherheitsrichtlinie für Ihr Webpart erstellen, damit die Aufrufe der API unter voller Vertrauenswürdigkeit ausgeführt werden können.

für ein Beispiel überprüfen this oder einfach Google für Sharepoint + Code Access Security Policies.

3

Da der Trace-Provider nicht verwalteten Code verwendet, sollten Sie die Methode mit markieren: Überprüfung Dies wird

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

stellen Sie sicher, .NET Sicherheit stoppt weiter in den Call-Stack, wenn dieses Attribut erreicht wird, die weniger vertrauenswürdigen Code ermöglichen Unmanaged Anrufe durch ihn zu tun. Denken Sie daran, dass die Protokollierungs-DLL weiterhin Berechtigungen zum Ausführen benötigt, also geben Sie entweder CAS-Richtlinien in der Datei "manifest.xml" an oder legen Sie sie im GAC ab. Wenn Sie es im GAC setzen, markieren Sie es mit dem folgende Attribute, das sie von einem nicht vollständig vertrauenswürdig dll aufrufbar macht:

[assembly: AllowPartiallyTrustedCallers] 

Dann sollten Sie in der Lage sein, es von einem WebPart in das Verzeichnis ist im Einsatz zu rufen.

+0

Hey .. Danke für Ihren Beitrag, ich habe etwas daraus gelernt. Aber meine Logging DLL und meine Webpart DLL sind im GAC. Ich bekomme immer noch die Ausnahme. – ashwnacharya

Verwandte Themen