0

私が取り組んでいる WCF プロジェクトでは、保持しているエンティティに対してある種の監査ログを実装する必要があります。基本的に、監査証跡は 4 つの必須フィールドで構成されます

  • 作成日時
  • 作成したユーザー ID
  • 更新日時
  • 更新されたユーザー ID

これはドメイン層にあるべきではないと思うので、DataAccess 層の nHibernate Event Listeners を介してこれを実装しようとしています。これまでのところ、DateTime は期待どおりに機能していますが、イベント リスナーでユーザー ID を取得する方法を理解できていません。理想的には、nHibernate セッション オブジェクトにアタッチされたある種のカスタム データとしてユーザー ID を取得したいと考えています。

どんな提案でも大歓迎です。

4

2 に答える 2

1

これが私がやっている方法ですが、WCFでこれを行った経験はありません。これには System.Web への参照が必要であることに注意してください。

    /// <summary>
    ///   Returns the user name of the current user. Gets user name from HttpContext if running as a web app, else WindowsIdentity.
    /// </summary>
    private static string GetUserName()
    {
        var identity = HttpContext.Current == null ? WindowsIdentity.GetCurrent() : HttpContext.Current.User.Identity;
        if (identity == null)
        {
            throw new Exception("Identity could not be determined.");
        }
        // Remove domain name if present
        var s = identity.Name;
        var stop = s.IndexOf("\\", StringComparison.InvariantCultureIgnoreCase);
        return (stop > -1) ? s.Substring(stop + 1, s.Length - stop - 1).ToUpper() : s;
    }
于 2013-01-08T12:38:27.737 に答える
1

.Net フレームワークには、コンテキスト ユーザー ID 情報のサポートが既に組み込まれています

利用可能な IPrincipal 実装の 1 つを使用するか、独自の実装を作成します。簡単です。次に、何らかの「begin-request」メソッドで、早い段階でプロパティを設定します。

ASP.NET コードには、注意すべき HttpContext.User もあります。

于 2013-01-08T08:13:38.643 に答える