38

Windows Server 2003 (IIS 6.0) サーバーと Windows Server 2008 (IIS 7.0) サーバーを使用しており、MSBuild を使用して Web アプリケーションを展開しています。

安全な展開を行う必要があり、これを行います。

  1. IIS 6 で Web サイト (または IIS 7 のアプリケーション) を停止します。AppPool は停止しません。

  2. Web サイトが停止しているかどうかを確認します。走っていない。

  3. Web サイトが停止している場合は、デプロイのために別のタスクを実行します。

  4. Web サイト IIS 6 (または IIS 7 のアプリケーション) を開始します。

どうすればこれを達成できますか?

更新: 私にとって重要: IIS6WebSite と IIS6AppPool (および IIS7 の場合) は、Web サイトまたは AppPool を停止しようとするときに停止ステータスを待ちますか?

Web サイトの停止アクション (または AppPool の停止アクション) を実行するときは、Web サイトが停止していることを 100% 確認する必要があり、Web サイトが停止している場合にのみ、他のターゲットを実行できます。

4

3 に答える 3

55

への参照を追加することにより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!");
            }
        }
    }
}

明らかにこれを独自の要件に合わせて調整し、展開ビルド スクリプトを使用して、結果のアプリケーションを実行します。

楽しみ。:)

于 2011-02-10T15:47:14.463 に答える
2
  • コマンドライン引数に依存するプログラムでIIS Webサイトを停止/開始するPowerShellなどのスクリプトを作成します。start-stop.ps1 /stop 1

  • カスタムステップとしてMsBuildスクリプトに入れます


IIS AppPool を再起動する方法については、これを確認してください

IIS WMI オブジェクト リファレンス

于 2011-02-10T15:16:31.643 に答える
0

したがって、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()
于 2016-05-12T23:23:44.173 に答える