使用C#在IIS6上回收应用程序池

时间:2011-02-18 17:41:08

标签: c# iis-6

我正在尝试通过Web应用程序以编程方式回收IIS6上的应用程序池。我在网上搜索过,发现了一堆解决方案(大多数涉及模仿),但似乎都没有。尽管输入了有效的用户名和密码,但我得到的最常见错误是E_ACCESSDENIED。任何人都可以指出我正确的方向吗?

2 个答案:

答案 0 :(得分:0)

也许这个问题可以帮到你。有几种解决方案(也适用于IIS6):

恕我直言,你能做的最好的事情就是决定采用具体的方法然后当你遇到异常时,用你的方法的源代码问一个具体的问题。否则,回答你的问题非常有效。

答案 1 :(得分:0)

我用于此类事情的解决方案(您尝试从需要管理权限的ASP.NET运行进程的地方)如下:

  1. 将您需要完成的任何内容写为自托管WCF服务。最好是Http REST服务,因此很容易调用(即使仅使用浏览器进行测试)
  2. 确保使用管理员帐户运行服务。您可以使用任务计划程序确保服务始终在运行,并使用管理员帐户运行。
  3. 使用WCF客户端从ASP.NET应用程序执行服务上的方法
  4. 无论我试图在ASP.NET应用程序中运行什么“进程”,它都会一直有效。

    现在,就细节(代码)而言,如果您需要帮助,请告诉我。下面的代码 是您在控制台应用程序中拥有的代码,以使其成为自托管WCF服务。

    在这种情况下,它是一个侦听端口7654的Http服务。

    static void Main(string[] args)
    {
      var webServiceHhost = new WebServiceHost(typeof(AppCmdService), new Uri("http://localhost:7654"));
      ServiceEndpoint ep = webServiceHhost.AddServiceEndpoint(typeof(AppCmdService), new WebHttpBinding(), "");
      var serviceDebugBehavior = webServiceHhost.Description.Behaviors.Find<ServiceDebugBehavior>();
      serviceDebugBehavior.HttpHelpPageEnabled = false;
      webServiceHhost.Open();
      Console.WriteLine("Service is running");
      Console.WriteLine("Press enter to quit ");
      Console.ReadLine();
      webServiceHhost.Close(); 
    }
    

    AppCmdService是一个WCF服务类,看起来像这样(在我的例子中)。在您的情况下,您可能不需要服务的响应。在我的情况下,我得到了Json的回应。你正在尝试做的事情的实际实现显然会有所不同。但我假设你已经解决了这个问题。所以只需从这里调用该类的方法。

      [ServiceContract]
      public class AppCmdService
      {
        [WebGet(UriTemplate = "/GetCurrentExcutingRequests/?", ResponseFormat= WebMessageFormat.Json)]
        [OperationContract]
        public IEnumerable<ExecutingRequestJson> GetCurrentExcutingRequests()
        {      
          return CurrentExecutingRequestJsonProvider.GetCurrentExecutingRequests("localhost");
        }
      }
    

    在ASP.NET方面,您实际上并不需要WCF客户端。您只需要一种对服务进行http调用的方法。因此,您只需使用HttpWebRequest来调用您的服务,然后执行您的流程。

    希望所有这些都有意义吗?