2012-09-04 15 views
7

मुझे डब्ल्यूसीएफ सेवा और प्रतिरूपण के साथ कुछ समस्याएं हैं, मैंने इसे नीचे एक सरल विधि से आसवित किया है। डब्ल्यूसीएफ सेवा वर्तमान में एक exe में स्वयं होस्ट किया गया है। अपवाद संदेश है "या तो एक आवश्यक प्रतिरूपण स्तर प्रदान नहीं किया गया था, या प्रदत्त प्रतिरूपण स्तर अमान्य है"। त्रुटि को फेंकने पर जांच कर, पहचान प्रतिरूपण स्तर को प्रतिनिधि के रूप में सेट किया गया है, जैसा कि मेरे क्लाइंट पर निर्दिष्ट है और यह केर्बेरोस के माध्यम से प्रमाणित है।या तो एक आवश्यक प्रतिरूपण स्तर प्रदान नहीं किया गया था, या प्रदान किया गया प्रतिरूपण स्तर अमान्य है

मैं थोड़ा परेशान हूं, क्योंकि ऐसा लगता है कि प्रतिरूपण लेवल और प्रामाणिकता की आवश्यकताओं को पूरा किया गया है। मेरी सोच यह है कि समस्या डोमेन सेटिंग्स के साथ संभवतः है, जिसे मैंने सेट किया है और सोचता है कि सही तरीके से सेट किया गया है। तो मेरे पास दो प्रश्न हैं:

  1. क्या नीचे ऑपरेशन सफल होना चाहिए? (या यह त्रुटिपूर्ण है?)
  2. इसे बनाने के लिए Win2k8 डोमेन पर किन सेटिंग्स को कॉन्फ़िगर करने की आवश्यकता है? मैं दो बॉक्सों का काम कर रहा हूं जो एक ही Win2k8 डोमेन के सदस्य हैं (इसका एक नया डोमेन और सुंदर वेनिला, प्रतिरूपण परीक्षण के इरादे से)।

कोड इस प्रकार है:

[OperationBehavior(Impersonation = ImpersonationOption.Required)] 
public string Test() 
{ 
    WindowsIdentity identity = ServiceSecurityContext.Current.WindowsIdentity; 
    using (identity.Impersonate()) 
    { 
     ProcessStartInfo pi = new ProcessStartInfo(@"c:\temp\test.bat"); 
     pi.UseShellExecute = false; 
     pi.RedirectStandardOutput = true; 
     Process p = Process.Start(pi); // exception thrown here! 
     p.WaitForExit(); 
     string o = p.StandardOutput.ReadToEnd(); 
     return o; 
    } 
} 

अपवाद विवरण:

Win32Exception occurred: Either a required impersonation level was not provided, or the provided impersonation level is invalid 
    at System.Diagnostics.Process.CreatePipeWithSecurityAttributes(SafeFileHandle& hReadPipe, SafeFileHandle& hWritePipe, SECURITY_ATTRIBUTES lpPipeAttributes, Int32 nSize) 
    at System.Diagnostics.Process.CreatePipe(SafeFileHandle& parentHandle, SafeFileHandle& childHandle, Boolean parentInputs) 
    at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo) 
    at System.Diagnostics.Process.Start() 
    at System.Diagnostics.Process.Start(ProcessStartInfo startInfo) 
    at MonetEnterprise.Service.SecurityService.Test() 

Test.bat फ़ाइल सामग्री

गूंज% उपयोगकर्ता नाम%

+1

डीबगर का उपयोग 'पहचान' को 'उपयोग' ब्लॉक में जाने से पहले बराबर क्या है? –

+0

हाय @ रहमहौउंड, यह ग्राहक का लॉगऑन है - क्या आप सही उम्मीद करेंगे? –

+1

एनटी डोमेन में डिफॉल्टेशन डिफ़ॉल्ट रूप से अक्षम है। यदि आवश्यक है (ऐसा लगता है), तो आपको इसे सक्षम करना होगा। देखें [अवरुद्ध प्रतिनिधि को सक्षम करना] (http://technet.microsoft.com/en-us/library/cc756940 (v = ws.10) .aspx) या [.NET में बाध्य प्रतिनिधिमंडल का उपयोग करके बहु-हॉप प्रतिरूपण को सक्षम करने के लिए कैसे करें और सक्रिय निर्देशिका] (http://www.codeproject.com/Articles/38979/How-to-enable-multi-hop-impersonation-using-constr) –

उत्तर

6
  1. जब तक आप .NET प्रक्रिया वर्ग का उपयोग कर रहे हैं, तब तक यह त्रुटिपूर्ण है, यह हमेशा मूल प्रक्रिया की पहचान से शुरू होगा। इसे किसी अन्य पहचान के तहत चलाने के लिए ऐसा लगता है कि आपको win32 api CreateProcessAsUser (जिसे मैंने अभी तक काम नहीं किया है) का उपयोग करना होगा।

  2. मुझे इसे उन्नत करने की आवश्यकता है (यानी विजुअल स्टूडियो प्रशासक के रूप में)।