動的IISサイトを作成

WebAPIのユニットテストは、一般的にIISのサイトを必要とする場合には、一般的なアプローチは、この機能を実現することができ、コーディングを通じて、実際には、バッチバットスクリプトを記述することによって達成されます。

   三つの主要な懸念があります。アプリケーションプール、Webサイト、結合(プロトコルタイプ:HTTP、HTTPS、IPアドレス、ポート、ホスト名)

 1.一般的なコード

  VARウェブサイト= app.WebSite; 
 
            使用VARの SM = 新しい新しいServerManagerの())
            { 
                // アプリケーションプール作成
                VAR APPPOOL = sm.ApplicationPools.FirstOrDefault(AP => ap.Name.Equals(webSite.PoolName))を、
 
                IF( == APPPOOL NULL 
                { 
                    CreateAppPool(sm.ApplicationPools、webSite.PoolName); 
                } 
 
                // Webサイトの作成
                するvarサイト= sm.Sites.FirstOrDefault(S => s.Name.Equals(webSite.SiteName)); 
 
                IF(サイト== nullの 
                {
                    CreateWebSite(sm.Sites、ウェブサイト、app.InstallPath)。
                } 
 
                sm.CommitChanges()。
            }
コードの表示

2.アプリケーションプールを作成します。

 ///  <要約> 
        /// アプリケーションプールを作成します。
         ///  </要約> 
        ///  ます。<param name = "アプリケーションプール"> </ param>の
        ///  <PARAM NAME = "AppPoolName"> </ param>の
        プライベート 無効 CreateAppPool(ApplicationPoolCollectionアプリケーションプール、文字列AppPoolName)
        { 
            VAR APPPOOL = appPools.Add(AppPoolName); 
 
            // もし自己起動 
            appPool.AutoStartを= trueに;
             // キューの長さ 
            appPool.QueueLength = 10000 ;
             // 起動モード 
            appPool.StartMode =StartMode.AlwaysRunning;
             // 間隔回復 
            appPool.Recycling.PeriodicRestart.Time = 新しい新規のTimeSpan();
             // アイドルタイムアウト 
            appPool.ProcessModel.IdleTimeout = 新しい新規のTimeSpan();
             // ワーカープロセスの最大数 
            appPool.ProcessModel.MaxProcesses = 1 ; 
        }
コードの表示

サイトを作成する3.

  ///  <要約> 
        /// 创建のWeb站点
         ///  </要約> 
        ///  ます。<param name = "サイト"> </ param>の
        ///  <PARAM NAME = "ウェブサイト"> </ param>の
        / //  ます。<param name = "PhysicalPathの"> </ param>の
        プライベート 無効 CreateWebSite(SiteCollectionサイト、ウェブサイト、ウェブサイト、文字列PhysicalPathの)
        { 
            Siteサイト = nullをBOOL isSiteCreated = ; 
 
            foreachのVAR結合してウェブサイト。
                ConstructBindingInfo(結合)。
 
                もし(!isSiteCreated)
                { 
                    サイト = sites.Add(webSite.SiteName、binding.BindingType、bingdingInfo、PhysicalPathの); 
 
                    // 是否自启动 
                    site.ServerAutoStart = ; 
 
                    isSiteCreatedは = ; 
                } 
                
                { 
                    site.Bindings.Add(bingdingInfo、binding.BindingType)。
                } 
            } 
 
            VARのルート= site.Applications [ " / " ]。
 
            //設定されたアプリケーションプール 
            root.ApplicationPoolName = webSite.PoolName;
             // 仮想ディレクトリ
             //   Root.VirtualDirectories [ "/"] = PhysicalPathのpathToRoot;
             // 予圧 
            root.SetAttributeValue(" preloadEnabled "真の); 
        }
コードの表示

バインディングの作成4。

  ///  <要約> 
        /// 构建绑定信息
         ///  </要約> 
        ///  ます。<param name = "結合"> </ param>の
        ///  <リターン> </リターン> 
        プライベート 文字列ConstructBindingInfo(WebSiteBinding結合)
        { 
            VAR SB = 新規のStringBuilder(); 
 
            もし(!文字列.IsNullOrEmpty(binding.IP))
            { 
                sb.Append(binding.IP)。
            } 
            
            { 
                sb.Append(" * " )。
            } 
 
            sb.Append("" ); 
 
            sb.Append(binding.Port); 
 
            sb.Append(" " ); 
 
            もし!(文字列.IsNullOrEmpty(binding.HostName))
            { 
                sb.Append(binding.HostName); 
            } 
            
            { 
                sb.Append(ストリング.Empty); 
            } 
 
            戻りsb.ToString(); 
        }
コードの表示

 

ます。https://www.cnblogs.com/liugh/p/8684696.htmlで再現

公開された259元の記事 ウォンの賞賛2 ビュー10000 +

おすすめ

転載: blog.csdn.net/hofmann/article/details/103986736