2016-08-04 4 views
0

私はWindows 2012 R2 Standard Editionで動作するC#Windowsサービスを持っています。 Service Control Manager(SCM)を日常的に使用してこのサービスを停止および開始します。これは過去に正常に実行されています。.NetのWindowsサービスを制御する際の問題

しかし、最近、私たちはここでの行動を見ている:

1.Weは、開始のタイムアウトを増やし、サービス、我々はサービスを停止しようとした

2.Alsoの機能を停止するために必要なSCMでこのサービスの停止ボタン(と[開始]ボタンも同様)がグレー表示されていることがわかりました。このため、タスクマネージャに移動してサービスを終了し、もう一度起動する必要がありました。

この動作の理由はなんですか?もしそうなら、この特定のコード変更を知るために必要な

foreach (Product p in Products) 
      { 
       Parallel.Invoke(() => {//Call a third part web service1} 
     Parallel.Invoke(() => {//Call a third part web service2} 
    } 

(製品の一覧はこちら200である)

どうやら、これはサービスのコンストラクタに次のコードを追加した後、最近始めているようです本当にこの動作の理由ですか?助言してください。

ありがとうございました。

答えて

1

あなたParallel.Invoke呼び出しは無意味なようで、あなたがinvokeから1つのアクションのみを呼び出し、それはあなたのコードは、それが実行に時間がかかる場合がありますなぜあなたは見ることができます

foreach (Product p in Products) 
{ 
     {//Call a third part web service1} 
     {//Call a third part web service2} 
} 

と同等であることが原因となっています。

ただし、この問題を修正しても、それが平行であるという理由だけでは高速であるとは限りません。コンストラクタで重い作業をしないで、OnStartに新しいスレッドを生成して、そこで動作させてください。

+0

Ok。ありがとうございます。停止ボタンがグレー表示されている理由をどう説明しますか? –

+0

サービスが長時間かかる「フォールト」状態になると、システム全体が故障し、サービスとの対話を停止します。 –

関連する問題