2011-02-11 22 views
9

Powershell komut dosyalarını (etkin dizin, dizin yönetimi, vb.) Yürüten bir web servisi yazıyorum.Web uygulamasında barındırma powershell runspace

Şu anda Web isteği başına Runspace örneği oluşturulmuştur. Runspace başlatma işlemi zaman alıcı bir işlem olduğundan, genellikle de yavaş operasyonlar olan ActiveDirectory gibi modülleri içe aktarmam gerekir.

Bu blog yazısında, Managing Exchange 2007 Recipients with C#, Runspace örneği statik bir alanda tutulur.

Ya Runspace örneğini statik alanda tutuyorsam, iş parçacığı güvenli midir? Belki de bu şekilde yapmanın başka sakıncaları vardır?

Teşekkür

cevap

12

Runspaces evreli değildir, ne de onlar çalıştıran komut ya olduğunu garanti edemez.

Bir RunspacePool oluşturmanızı ve web hizmeti kuyruğunuzun çalışmasını öneririm. Bu aslında oldukça kolaydır. Bunun için v2 ctp3 için blog yazdım, ancak API, RTM için değişmedi.

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

güncelleme:

Eğer bir veya daha fazla modülleri ile havuzda her runspace önyükleyebilir RunspaceFactory.CreateRunspacePool (InitialSessionState) aşırı kullanmak istiyorsanız. oluşturmak ve bu nasıl başlatıldığını görmek için bkz:

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

Bir PowerShell örneğini oluşturmak her zaman, onun RunspacePool özelliğine havuzu atayın.

+0

Aha, harika! Bu yüzden, statik alan RunspacePool oluşturmalı ve daha sonra her web isteğinde yürütülen her Powershell örneğine iletmeliyim. Havuzdaki Runspaces modüllerini önyüklemenin bir yolu var mı? Belki bunu yapmaya bile gerek yok mu? –

+0

, daha fazla bilgi için nasıl güncelleştirildi bunu. – x0n

+0

tnx, x0n. Ben bu cevabı iki upvotes vermek isterdim :) –

İlgili konular