2009-07-02 21 views
0

私はwebpartにいくつかのログを実装しようとしています。私はここで説明したように12のハイブログにログメッセージを書き込み、カスタムトレースプロバイダーの実装を実装:webpartのカスタムTraceProvider実装でセキュリティ例外がスローされる

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

私はlogging.DLLと呼ばれるDLLに上記のコードをラップしています。

私はこのwebpartでこのDLLを参照しています。

私は、昇格された特権を使用してコンストラクタでRegisterTraceProviderを呼び出しています。

私は、manifest.xmlの安全なコントロールとしてLogging DLLを宣言しました。

しかし、Webパーツをページに追加しようとすると、「要求に失敗しました」というメッセージのセキュリティ例外が発生します。このエラーは、コンストラクタでRegisterTraceProviderメソッドを呼び出そうとしたときにスローされます。

ここに何か不足していますか?どのようにしてこのログを有効にすることができますか?

編集:ロギングDLLとウェブパーツDLLの両方がGACにあります。

答えて

0

私は、コンストラクタ内でm RegisterTraceprovider()を呼び出していました。これが失敗した理由だったように見えます。私はRegisterTraceProvider()呼び出しをOnInit()オーバーライドに移しました。

1

あなたのwebpartはGACまたはBinフォルダに展開されていますか? Binフォルダにある場合、Webパーツは完全信頼で実行されていないため、Webパーツのコードアクセスセキュリティポリシーを記述して、フルトラストのAPIへの呼び出しを実行する必要があります。

例のチェックはthisです。またはGoogle for Sharepoint +コードアクセスセキュリティポリシーをチェックしてください。

3

トレースプロバイダーがアンマネージコードを使用するので、あなたが持つメソッドをマークする必要があります。これは、信頼性の低いコードを可能にする、.NETのセキュリティは、この属性が到達したときにコールスタックにさらにチェックを停止することを確認します

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

管理されていない呼び出しを行うことができます。ロギングdllには引き続き実行権限が必要なので、manifest.xmlにCASポリシーを指定するか、GACに入れてください。あなたはGACにそれを置く場合は、非完全に信頼DLLからそれが呼び出し可能になり、次の属性でマーク:

[assembly: AllowPartiallyTrustedCallers] 

次に、binディレクトリに展開WebPartからそれを呼び出すことができるはずです。

+0

あなたの投稿をありがとう、私はそれから何かを学んだ。しかし、私のロギングDLLと私のwebpart DLLはどちらもGACにあります。私はまだ例外を取得しています。 – ashwnacharya

関連する問題