2017-04-25 142 views
0

我將創建一個.NET API,它將由我的Node.Js服務器統一發送。當服務器正在使用時,api將保持清醒狀態。當服務器沒有被使用時,它將停止ping,並且api將閒置。我可以使用API​​中的global.asax文件來控制關閉數據倉庫。通過Azure Rest API或Azure管理SDK啓動/停止Azure SQL數據倉庫

有沒有辦法通過Azure資源管理客戶端SDK在C#中暫停SQL DW?或者我手動構建一個POST到REST API?

我一直在關注這篇博客文章的細節,我發現它很有幫助,但無法在ResourceMangementClient中找到一個方法來暫停資源(我的DW)。

https://zimmergren.net/developing-with-azure-resource-manager-part-3-build-an-application-using-c-which-is-using-the-azure-resource-manager-apis/

如果這是不可能的,我可以手動建立後的REST API,因爲在這裏看到(感謝蔚藍Twitter的支持!):

https://docs.microsoft.com/en-us/rest/api/sql/databases#Databases_Pause

**編輯(工作答案如下):

我能夠成功地使用REST api來停止/啓動DW,如我在下面的答案中所見。我仍然不知道是否可以使用資源管理SDK來執行此操作。

如果您正在嘗試執行此操作,請確保您已將身份驗證設置爲使用其餘API。詳細信息可以在這裏找到:

https://docs.microsoft.com/en-us/rest/api/?redirectedfrom=MSDN

+0

據我所知,Azure App Service沒有任何生命週期事件。您需要檢查Web應用程序在應用程序級別閒置的時間。 –

回答

0

這裏是我以前通過Azure的REST API正確關閉我的DW解決方案。我仍然不確定Azure SDK是否有可能執行此操作。

private static string AuthToken { get; set; } 
    private static TokenCredentials TokenCredentials { get; set; } 
    private static readonly HttpClient client = new HttpClient(); 


    AuthToken = GetAuthorizationToken(); 
    TokenCredentials = new TokenCredentials(AuthToken); 

    createPost(); 


    private static string GetAuthorizationToken() 
    { 
     ClientCredential cc = new ClientCredential(ClientId, ServicePrincipalPassword); 
     var context = new AuthenticationContext("https://login.windows.net/" + AzureTenantId); 
     var result = context.AcquireToken("https://management.azure.com/", cc); 
     if (result == null) 
     { 
      throw new InvalidOperationException("Failed to obtain the JWT token"); 
     } 

     return result.AccessToken; 
    } 

    public void createPost() 
    { 
     var request = (HttpWebRequest)WebRequest.Create("https://management.azure.com/subscriptions/XXXXXXXXXXXXXXXXXXXXXXXX/resourceGroups/MYGROUP/providers/Microsoft.Sql/servers/MYSERVER/databases/MYDW/pause?api-version=2014-04-01"); 

     request.Method = "POST"; 
     request.ContentType = "application/json"; 
     request.ContentLength = 0; 
     request.Headers.Add("Authorization", "Bearer " + AuthToken); 

     var response = (HttpWebResponse)request.GetResponse(); 

     var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); 
     System.Diagnostics.Debug.WriteLine(responseString); 
    }