2010-08-17 21 views
6

में wcf से प्रमाणीकृत उपयोगकर्ता आईडी कैसे प्राप्त करें I NHHernate कस्टम संदर्भ (ICurrentSessionContext) लागू किया है। इस संदर्भ में मैं NHibernate सत्र इंजेक्ट करता हूं इसलिए मेरे पास प्रति कॉल पैटर्न सेटअप सत्र है। ठीक है, अब मैंने एक इंटरसेप्टर बनाया है जो वर्तमान लॉग इन उपयोगकर्ता का उपयोगकर्ता आईडी लेता है। अब मैं इस कार्य करें:nhibernate

public ISession CurrentSession() 
{ 
    // Get the WCF InstanceContext: 
    var contextManager = OperationContext.Current.InstanceContext.Extensions.Find<NHibernateContextManager>(); 
    if (contextManager == null) 
    { 
    throw new InvalidOperationException(
     @"There is no context manager available. 
     Check whether the NHibernateContextManager is added as InstanceContext extension. 
     Make sure the service is being created with the NhServiceHostFactory. 
     This Session Provider is intended only for WCF services."); 
    } 

    var session = contextManager.Session; 
    AuditLogInterceptor interceptor = new AuditLogInterceptor(); 
    if (session == null) 
    { 
    session = this._factory.OpenSession(interceptor); 
    interceptor.Session = session; 

    contextManager.Session = session; 
    } 

    return contextManager.Session; 
} 

मेरे AuditLogInterceptor UserId लेता है, लेकिन मैं कैसे (जहां से) इस userId प्राप्त करने के लिए पता नहीं है।

उत्तर

1

अपने उपयोगकर्ता प्रमाणीकृत है, तो आप उपयोग कर सकते हैं:

OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name 
0

मुझे लगता है कि वर्तमान उपयोगकर्ता वर्तमान धागे पर प्रिंसिपल के रूप में सेट किया जा रहा है?

var userName = Thread.CurrentPrincipal.Identity.Name; 

this article में कुछ अतिरिक्त जानकारी है कि मददगार साबित हो सकता है:

यदि हां, तो कुछ इस तरह है कि तुम क्या जरूरत है।