1

アクセス許可属性を作成し、BLL で記述したメソッドで使用しました。必要に応じて正常に動作し、デバッグもうまくいきます。しかし、同じ属性を使用すると、WCF layer単に機能しなくなります。エラーは発生しませんが、権限はチェックされておらず、デバッグもありません。コードは属性を無視しています。

物事を簡単にするために、このアプローチを使用します

私の WCF メソッドは、WCF メソッドと同じクラスで定義された別のメソッドを呼び出し、その子メソッドは BLL を呼び出し、この子メソッドには Permission 属性があります。

しかし、役に立たない。よろしくお願いします。

4

2 に答える 2

3

PostSharpはビルドプロセスの一部です。WCFサービスを含むライブラリは、属性コードを独自のコードと織り交ぜるPostSharpコンパイル後プロセスを実行していないと思われます。ブレークポイントでない場合...など。PostSharpコードは機能しません。

通常、コンパイル後のプロセスは、開発用PCのシステムトレイにあるバックグラウンドアプリケーションによって実行されます。ただし、無効にすることができます。WCFサービスライブラリをどのようにコンパイルしているかわかりません。

PostSharpをプロジェクトに手動で追加できます。

PostSharpのドキュメントを引用するには:

  1. テキストエディタを使用してプロジェクトファイル(csproj、vbproj、...)を開きます。プロジェクトがVisualStudioに読み込まれている場合は、ソリューションエクスプローラーを開き、プロジェクト名を右クリックし、[プロジェクトの読み込み解除]をクリックしてから、同じプロジェクトをもう一度右クリックして、[編集]をクリックします。

  2. ファイルの終わり近くにある要素を見つけます。たとえば、C#2.0プロジェクトは、次のような要素で終了する必要があります。

    <Import Project = "$(MSBuildBinPath)\ Microsoft.CSharp.targets" />

  3. インポート行の前に、次のテキストを挿入します。

    <PropertyGroup> <DontImportPostSharp> True </ DontImportPostSharp> </ PropertyGroup>

  4. C#/ VBインポート行の後に、次のテキストを挿入します。

    <Import Project = ".... \ Third Party \ PostSharp 2.0 \ PostSharp.targets" />

  5. ファイルを保存し、プロジェクトをリロードします。

  6. コンパイル。

BLLアセンブリからメソッドを呼び出す場合は、PostSharpのコンパイル後のプロセスも正しく実行されているかどうかを確認してください。

于 2012-06-08T07:01:22.390 に答える
0

PostSharp はわかりませんが、

私の最初のステップは、PostSharp ウーブン IL をリフレクターして、生成されたコードを確認することです。正しく見えますか?

アスペクトは何らかのセキュリティ コンテキスト情報を参照していると思います。コンテキストが有効でない場合に処理を無視するアスペクトにガード コードはありますか? 許可属性は、あなたに言わずにこれを処理しますか。

つまり、Permission 属性は WCF 要求エンドポイントで動作するように設計されているのでしょうか?

于 2012-06-08T06:28:35.353 に答える