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で再現