2011-10-28 8 views
0

このコードをもっとうまく使う方法はありますか?アプリケーションプールのプロパティを変更する

ServerManager serverManager = new ServerManager(); 
      ApplicationPoolCollection applicationPoolCollection = serverManager.ApplicationPools; 

      foreach (var site in serverManager.Sites) 
      { 

       //Trace.WriteLine("Site: {0}", site.Name);) 
       foreach (var app in site.Applications) 
       { 

        if (app.Path.EndsWith("Report") || app.Path.EndsWith("Data")) 
        { 
         Trace.WriteLine("ReportApi  " + app.ApplicationPoolName); 

         applicationPoolCollection[app.ApplicationPoolName].Enable32BitAppOnWin64 = true; 
         applicationPoolCollection[app.ApplicationPoolName].ManagedRuntimeVersion = "v4.0"; 


        } 
       } 
      } 

      serverManager.CommitChanges(); 

私は助けのための唯一のIIS6

感謝を持っているPC上でそれを実行する場合に何が起こるか2番目の質問は、。

+0

は、コードで何が悪いのでしょうか? 「ニース」はあまり正確な概念ではありません。コードはそのままではっきりしています。 –

答えて

3

かなりきれいに見えます。物事を少し平らにしたい場合は Cast拡張メソッド( IEnumerableの型で動作し、それらを IEnumerable<T>に変換する)を に変更するとLINQyになります。物事をより明確にし、他の人には不透明にします。好きなのを選びな。

var reportOrDataApps = serverManager 
    .Sites 
    .Cast<Site>() 
    .SelectMany(s => s.Applications.Cast<Application>()) 
    .Where(app => app.Path.EndsWith("Report") || app.Path.EndsWith("Data")) 

foreach(var app in reportOrDataApps) 
{ 
    Trace.WriteLine("ReportApi  " + app.ApplicationPoolName); 
    applicationPoolCollection[app.ApplicationPoolName].Enable32BitAppOnWin64 = true; 
    applicationPoolCollection[app.ApplicationPoolName].ManagedRuntimeVersion = "v4.0"; 
} 

EDIT:

コレクションはまだあなたがLINQを短縮することができIEnumerable<T>を実装することが表示されます:あるとして

var reportOrDataApps = serverManager 
    .Sites 
    .SelectMany(s => s.Applications) 
    .Where(app => app.Path.EndsWith("Report") || app.Path.EndsWith("Data")) 
+0

+1サンプル...あなたが/読んでいる人にコードをターゲットにする必要があります - あなた/あなたのチームがネストされたselectよりもLINQに堪能でない場合、実際に何が起こるのかを簡単に隠すかもしれません。 –

+2

私は、LINQでこのような問題が起きると、より正確なコード(入れ子の少ない、複雑さの少ない)が得られることがわかります。あなたがまだ持っていないなら、間違いなくピックアップする価値がある。 – spender

関連する問題