2011-02-11 14 views
9

मैं एक वेब सेवा लिख ​​रहा हूं जो पावरहेल स्क्रिप्ट (सक्रिय निर्देशिका, निर्देशिका प्रबंधन, आदि) निष्पादित करता है।वेब अनुप्रयोग में होस्टिंग पावरहेल रनस्पेस

अभी, रनस्पेस उदाहरण प्रति वेब अनुरोध बनाया गया है। चूंकि रनस्पेस प्रारंभिक समय लेने वाला ऑपरेशन है, साथ ही अक्सर मुझे मॉड्यूल आयात करना पड़ता है, जैसे ActiveDirectory, जो धीमे संचालन भी होते हैं।

इस ब्लॉग पोस्ट में Managing Exchange 2007 Recipients with C#, रनस्पेस उदाहरण स्थिर क्षेत्र में रखा जाता है।

मैं भटकता हूं कि अगर मैं स्थिर क्षेत्र में रनस्पेस उदाहरण रखता हूं, तो क्या यह थ्रेड सुरक्षित होगा? शायद इस तरह से ऐसा करने में अन्य कमीएं हैं?

धन्यवाद

उत्तर

12

Runspaces धागा सुरक्षित नहीं हैं, न ही वे गारंटी ले सकते हैं कि स्क्रिप्ट वे चल रहे हैं या तो कर रहे हैं।

मैं सुझाव दूंगा कि आप एक रनस्पेसपूल बनाएं और अपनी वेब सेवा कतार उस पर काम करें। यह वास्तव में करना बहुत आसान है। मैंने v2 ctp3 के लिए इसके बारे में ब्लॉग किया, लेकिन एपीआई आरटीएम के लिए नहीं बदला है।

http://www.nivot.org/2009/01/22/CTP3TheRunspaceFactoryAndPowerShellAccelerators.aspx

अद्यतन:

आप एक या अधिक मॉड्यूल के साथ पूल में प्रत्येक runspace प्रीलोड RunspaceFactory.CreateRunspacePool (InitialSessionState) अधिभार उपयोग करना चाहते हैं। बना सकते हैं और यह प्रारंभ करने में कैसे देखने के लिए, देखें:

http://www.nivot.org/2010/05/03/PowerShell20DeveloperEssentials1InitializingARunspaceWithAModule.aspx

हर बार जब आप एक PowerShell उदाहरण हैं, तो इसकी RunspacePool संपत्ति के लिए पूल आवंटित।

+0

आह, बढ़िया! तो मुझे स्थिर क्षेत्र RunspacePool बनाना चाहिए और उसके बाद प्रत्येक वेब अनुरोध में निष्पादित प्रत्येक पावरहेल उदाहरण को पास करना चाहिए। पूल में रनस्पेस के लिए मॉड्यूल प्रीलोड करने का कोई तरीका है? शायद मुझे ऐसा करने की भी आवश्यकता नहीं है? –

+0

अधिक जानकारी के साथ अपडेट किया गया कि यह कैसे करें। – x0n

+0

टीएनएक्स, x0n। काश मैं आपको इस जवाब में दो अपवॉट दे सकता हूं :) –

संबंधित मुद्दे