2012-03-16 86 views
0

我有一個PowerShell腳本,我想從網頁調用。我有c#代碼,它的工作原理,但腳本最終做一些SQL任務,不快速回報。它沒有任何我想要顯示給網頁的結果,所以我似乎無法讓網頁觸發腳本,然後繼續前進。它始終在我的瀏覽器底部顯示「正在等待服務器...」,即使沒有任何東西可以返回。最終頁面超時。從ASP.NET(C#)調用PowerShell腳本,但不等待結果

我試過使用InvokeAsync()選項,但它仍然給我相同的結果。使用Process.Start()在調用Powershell腳本時有更好的運氣,然後繼續? 謝謝, 格雷格

Runspace runspace = RunspaceFactory.CreateRunspace(); 
runspace.Open(); 
string cmdArg = scriptfile + " " + TextBox4.Text + " " + RadioButtonList1.SelectedValue; 
//Collection<PSObject> psresults; 
using (Pipeline pipeline = runspace.CreatePipeline()) 
{ 
    pipeline.Commands.AddScript(cmdArg); 
    //psresults = pipeline.Invoke(); 
    pipeline.InvokeAsync(); // InvokeAsync calls it as a background process so it won't make the web page timeout. 
} 

runspace.Close(); 
+0

關於它的最終解決方案和完整的源代碼? – Kiquenet 2012-05-25 08:23:51

回答

0

您正在使用運行空間管道異步,但你打開你的運行空間同步

嘗試使用:

runspace.OpenAsync(); 

希望這有助於:)

+0

當我將Open()更改爲OpenAsync()時,我得到Runnspace不在打開狀態的運行時錯誤,當我調試時,狀態處於「打開」狀態並且從未進入「打開」狀態。 – gregs 2012-03-20 12:17:12

+0

然後,一種解決方法是將所有這些邏輯移入web服務。 – Kharaone 2012-03-20 22:38:43

0

您不應該將運行空間放在using子句中 - 它會嘗試在invokeasync之後立即處理它呼叫,並阻止。您應該改爲在回調中處理運行空間。

+0

我把代碼從使用塊中取出,但它沒有改變任何東西。網頁仍然等待迴應並最終超時。 – gregs 2012-03-20 12:16:23