2017-04-25 143 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); 
    }