簡體   English   中英

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

[英]Recycle App Pool on IIS6 using C#

我正在嘗試通過Web應用程序以編程方式在IIS6上回收應用程序池。 我在網上搜索了所有內容,發現了一堆解決方案(大多數涉及模擬),但似乎都沒有。 盡管輸入了有效的用戶名和密碼,但我遇到的最常見錯誤是E_ACCESSDENIED。 有人能指出我正確的方向嗎?

也許這樣的問題可以幫助您。 有幾種解決方案(也適用於IIS6):

恕我直言,您最好的辦法是決定采用一種具體的方法,然后在遇到異常時,向您的方法的源代碼提出一個具體的問題。 否則,回答您的問題非常有用。

我用於此類事情的解決方案(在此處嘗試從ASP.NET運行需要管理特權的進程)是:

  1. 編寫您需要做的任何事情作為自托管WCF服務。 最好是Http REST服務,因此調用起來很容易(即使僅使用瀏覽器進行測試)
  2. 確保使用管理員帳戶運行服務。 您可以使用任務計划程序來確保該服務始終在運行,並且可以使用管理員帳戶運行。
  3. 使用WCF客戶端從ASP.NET應用程序在服務上執行方法

無論我試圖從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來調用您的服務,從而執行您的過程。

希望所有這些都有意義嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM