Windows Server 2003(IIS 6.0)サーバーとWindows Server 2008(IIS 7.0)サーバーがあり、MSBuildを使用してWebアプリケーションを展開しています。
安全な展開を行う必要があり、これを実行します。
IIS 6(またはIIS 7)のアプリケーション)でWebサイトを停止します。AppPoolは停止しません。
ウェブサイトが停止していないか確認してください。走っていない。
Webサイトが停止している場合は、デプロイのために別のタスクを実行します。
ウェブサイトを開始IIS 6(またはアプリケーションIIS 7))、
どうすればこれを達成できますか?
更新:私にとってのキー:IIS6WebSiteとIIS6AppPool(およびIIS7の場合)、Stop WebsiteまたはAppPoolを試すときに停止ステータスを待ちますか?
Webサイトの停止アクション(またはAppPoolの停止アクション)を実行する場合、100%Webサイトが停止していることを確認する必要があります。その後、Webサイトが停止している場合にのみ、他のターゲットを実行できます。
Microsoft.Web.Administration
への参照(X:\Windows\System32\inetsrv
または同等のシステムにあります)を追加することで、IIS7で状況を適切に管理し、以下のように制御できます。
namespace StackOverflow
{
using System;
using System.Linq;
using Microsoft.Web.Administration;
class Program
{
static void Main(string[] args)
{
var server = new ServerManager();
var site = server.Sites.FirstOrDefault(s => s.Name == "Default Web Site");
if (site != null)
{
//stop the site...
site.Stop();
if (site.State == ObjectState.Stopped)
{
//do deployment tasks...
}
else
{
throw new InvalidOperationException("Could not stop website!");
}
//restart the site...
site.Start();
}
else
{
throw new InvalidOperationException("Could not find website!");
}
}
}
}
明らかにこれを独自の要件に合わせて調整し、デプロイメントビルドスクリプトを介して、結果のアプリケーションを実行します。
楽しい。 :)
したがって、IIS7に対する上記の答えがあります。不足しているのはIIS6です。だからここに行きます。 IIS 6で使用できるのはCOM相互運用オブジェクトのみです。また、vbであるため、変換方法を理解する必要があります。http://www.codeproject.com/Articles/16686/AC-alternative-for-the-Visual-Basic-GetObject-fun必要がありますこのコードのためだけにvbプロジェクトを作成することもできますが、それはばかげています。
Dim WebServiceObj As Object
dim IisSiteId as Integer = 0
WebServiceObj = GetObject("IIS://localhost/W3SVC/" & IisSiteId)
WebServiceObj.Stop()
WebServiceObj.Start()