2

IIS 7 のアプリケーション プール内のアプリケーションの状態を、同じドメインの別のマシンから監視する必要があります。監視アプリケーションは C# で作成し、Windows サービスとして実行する必要があります。

私のサーバーで、管理者権限を持つユーザーを作成し、aspnet_regiis -ga machine\username正常に機能するコマンドを実行します。

私の問題は、アプリケーション プールにアクセスしようとすると、COMException が「アクセスが拒否されました」というメッセージが表示されることです。私は何を間違えましたか、またはどのステップを見逃しましたか?

例としてhttp://patelshailesh.com/index.php/create-a-website-application-pool-programmatically-using-csharpのコードを使用しました。

        int status = 0;
        string ipAddress = "10.20.2.13";
        string username = "username";
        string password = "password";
        try
        {
            DirectoryEntry de = new DirectoryEntry(string.Format("IIS://{0}/W3SVC/AppPools/MyAppPoolName", ipAddress), username, password);

            //the exception is thrown here.
            status = (int)de.InvokeGet("AppPoolState");

            switch (status)
            {
                case 2:
                    //Running
                    break;
                case 4:
                    //Stopped
                    break;
                default:
                    break;
            }
        }
        catch (Exception ex)
        {

        }
4

3 に答える 3

1

あなたが見つけたコードはIIS6用のようです。おそらく、サポートされている新しい IIS7 管理 API を使用したほうがよいでしょう。ServerManager.OpenRemoteを呼び出してServerManagerオブジェクトを取得することから始めることができます。

于 2010-04-27T17:36:07.550 に答える
0

AuthenticationTypeをいじる必要があるかもしれません。2.0 以降のデフォルトは Secure ですが、SSL を設定する必要があるかもしれません。また、「ユーザーは次回ログオン時にパスワードを変更する必要があります」がチェックされているアカウントからのアクセス拒否メッセージを見てきました。

于 2010-04-27T17:41:51.993 に答える
0

これは、Windows 7 および Windows Server 2008 でうまく機能します (残念ながら、XP および 2003 Server では機能しません)。リモート接続を有効にするには、サーバー マネージャーを介して IIS に管理サービスの役割を追加する必要がありました。

アプリケーション プールの状態を取得する方法の簡単な例を次に示します。

public ObjectState State
    {
        get
        {
            ServerManager server = null;
            ObjectState result = ObjectState.Unknown;
            try
            {
                server = ServerManager.OpenRemote(address);
                result = server.ApplicationPools[name].State;
            }
            finally
            {
                if (server != null)
                    server.Dispose();
            }

            return result;
        }
    }

ドライスのおかげです。

于 2010-04-29T15:13:40.560 に答える