2017-11-22 23 views
0

ウィンドウサービスのようなコードを使用して、リモートサーバー上でWebサービスを開始するためのクラスを見つけることができません。リモートサーバー上のWebサービスを実際にC言語で再起動する方法#

 var sc = new System.ServiceProcess.ServiceController("mywebsite", "remoteservername"); 
     sc.Start(); 
     sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Running); 
     sc.Stop(); 
     sc.WaitForStatus(System.ServiceProcess.ServiceControllerStatus.Stopped); 
+0

誰もが私を助けることができますか? –

+0

あなたは私の提案を試しましたか? – Yuri

答えて

0

静的な無効メイン(文字列[] args){

 try 
     { 
     using (ServerManager manager = new ServerManager()) 
     { 
      var iisManager = ServerManager.OpenRemote("YourServerName"); 

      Microsoft.Web.Administration.Site site = iisManager.Sites.Where(q => q.Name.Equals("YourSiteName")).FirstOrDefault(); 

      if (site.State== site.Start()) 
      { 
       site.Stop(); 
      } 
      else 
      { 
       site.Start(); 
      } 

      manager.CommitChanges(); 


      } 

     } 
     catch (Exception ex) 
      { 

      } 
    } 
1

WebサービスはWindowsサービスの下には表示されません。 IISの下で実行されており、このサービスが実行されているアプリケーションプールを停止/開始する必要がある場合、IISを停止/開始する必要があります。遠隔から行う場合は、ターゲットサーバーでWMIを有効にする必要があります。あなたのためにこれを行いますコードを提供するあなたの便宜のために:

public void PoolAction(String servername, String AppPoolName, String action) 
    { 
     StringBuilder sb = new StringBuilder(); 
     ConnectionOptions options = new ConnectionOptions(); 
     options.Authentication = AuthenticationLevel.PacketPrivacy; 
     options.EnablePrivileges = true; 
     ManagementScope scope = new ManagementScope(@"\\" + 
      servername + "\\root\\MicrosoftIISv2", options); 

     // IIS WMI object IISApplicationPool to perform actions on IIS Application Pool 
     ObjectQuery oQueryIISApplicationPool = 
      new ObjectQuery("SELECT * FROM IISApplicationPool"); 

     ManagementObjectSearcher moSearcherIISApplicationPool = 
      new ManagementObjectSearcher(scope, oQueryIISApplicationPool); 
     ManagementObjectCollection collectionIISApplicationPool = 
      moSearcherIISApplicationPool.Get(); 
     foreach (ManagementObject resIISApplicationPool in collectionIISApplicationPool) 
     { 
      if (resIISApplicationPool["Name"].ToString().Split('/')[2] == AppPoolName) 
      { 
       // InvokeMethod - start, stop, recycle can be passed as parameters as needed. 
       resIISApplicationPool.InvokeMethod(action, null); 
      } 
     } 

注:

  • アクションが「停止」や「リサイクル」
  • アカウントの下で、「スタート」を含めることができますこのコードはターゲットサーバー上で管理する必要があります。

サーバー上でWMIを有効にする方法 enabling WMI on the server

関連する問題