2012-03-16 10 views
0

Webページから呼び出すPowerShellスクリプトがあります。私はC#コードを持っていますが、それは動作しますが、スクリプトは最終的にはスピーディーではないいくつかのSQLタスクを実行しています。 Webページに表示したい結果はありません。そのため、Webページにスクリプトを起動させてから移動することはできません。それは返すものがないのに私のブラウザの一番下に "サーバを待っています..."と続きます。最終的にページはタイムアウトします。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

答えて

0

あなたは非同期に実行空間パイプラインを使用しているが、あなたはあなたの実行空間を開く同期

は、使用してみてください:

runspace.OpenAsync(); 

:)

+0

私はOpenAsync()にOpen()を変更すると、RunspaceがOpen状態ではなく、デバッグ時に状態が "Opening"になり、 "Open"にならないというランタイムエラーが発生します。 – gregs

+0

これを回避するには、このロジックをすべてWebサービスに移動することです。 – Kharaone

0
を助けた希望

あなたはrun節をusing句に入れてはなりません。invokeasyncの直後にそれを破棄しようとしますコール、およびブロック。代わりに、コールバックにランスペースを配置する必要があります。

+0

私はusingブロックからコードを取り出しましたが、何も変更されませんでした。 Webページはまだ応答を待って、最終的にタイムアウトします。 – gregs

関連する問題