Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Microsoft AnalysisServices-使用Azure功能启动和停止服务器_C#_Azure_Sdk_Azure Functions_Azure Analysis Services - Fatal编程技术网

C# Microsoft AnalysisServices-使用Azure功能启动和停止服务器

C# Microsoft AnalysisServices-使用Azure功能启动和停止服务器,c#,azure,sdk,azure-functions,azure-analysis-services,C#,Azure,Sdk,Azure Functions,Azure Analysis Services,我想写一个Azure函数来停止并恢复MS分析服务。 我的任务是使用和。 这是我第一次使用C#(我有Python/Javascript背景)。 我做错了什么?有人能提供正确的解决方案吗?我会发自内心的感激 以下是我当前的代码示例: using System; using System.Net; using System.IO; using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; u

我想写一个Azure函数来停止并恢复MS分析服务。 我的任务是使用和。 这是我第一次使用C#(我有Python/Javascript背景)。 我做错了什么?有人能提供正确的解决方案吗?我会发自内心的感激

以下是我当前的代码示例:

using System;
using System.Net;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;

static HttpClient client = new HttpClient();
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req)
{
    var subscriptionId = "mySId";
    var resourceGroupName = "myRGName";
    var serverName = "mySName";
    var APIurl = $"https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.AnalysisServices/servers/{serverName}/resume?api-version=2017-08-01";

    var response = await client.PostAsync(APIurl, null);
    string result = await response.Content.ReadAsStringAsync();
    return req.CreateResponse(HttpStatusCode.OK);
}
使用系统;
Net系统;
使用System.IO;
使用System.Net.Http;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore.Mvc;
使用Microsoft.Azure.WebJobs;
使用Microsoft.AspNetCore.Http;
使用Microsoft.Extensions.Logging;
使用Microsoft.Extensions.Primitives;
使用Newtonsoft.Json;
静态HttpClient=新HttpClient();
公共静态异步任务运行(HttpRequestMessage req)
{
var subscriptionId=“mySId”;
var resourceGroupName=“myRGName”;
var serverName=“mySName”;
var apirl=$”https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.AnalysisServices/servers/{serverName}/resume?api version=2017-08-01”;
var response=await client.PostAsync(apirl,null);
字符串结果=wait response.Content.ReadAsStringAsync();
返回请求CreateResponse(HttpStatusCode.OK);
}
这是我在控制台中得到的。但服务器并没有停止。

由于您在问题中提到的api“Resume”需要Azure Active Directory OAuth2流,因此您需要首先通过引用此获取访问令牌,然后使用访问令牌在功能代码中请求此api

在函数应用程序的代码中,您需要将上面我们获得的访问令牌设置为授权值,然后执行post reuqest

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "Your Oauth token");

对于那些在需要的时候-这是我完整的工作解决方案

using System;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using System.Net.Http.Headers;
using System.Net;
using System.Net.Http;
using System.Collections.Generic;
using Microsoft.IdentityModel.Clients.ActiveDirectory;

namespace ManageAS
{
    public class ManageAS
    {
        string accessToken = null;
        string responseString = null;
        string serverStatus = null;
        string serverFullURI = Environment.GetEnvironmentVariable("FULL_SERVER_URI");
        static string shortServerName = Environment.GetEnvironmentVariable("SHORT_SERVER_NAME");
        string resourceURI = "https://management.core.windows.net/";
        string clientID = Environment.GetEnvironmentVariable("CLIENT_ID");
        string clientSecret = Environment.GetEnvironmentVariable("CLIENT_SECRET");
        string tenantID = Environment.GetEnvironmentVariable("TENANT_ID");
        static string resourceGroupName = Environment.GetEnvironmentVariable("RESOURCE_GROUP_NAME");
        static string subscriptionId = Environment.GetEnvironmentVariable("SUBSCRIPTION_ID");
        static Uri apiURI = null;

        [FunctionName("PerformAction")]
        public async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequestMessage req,
            ILogger log)
        {    
            await GetAccessToken();
            await GetServerStatus(accessToken);

            if (serverStatus == "Paused")
            {
                apiURI = new Uri(string.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AnalysisServices/servers/{2}/resume?api-version=2017-08-01", subscriptionId, resourceGroupName, shortServerName));
                this.responseString = await ServerManagement(apiURI, accessToken);
            }

            if (serverStatus == "Succeeded")
            {
                apiURI = new Uri(string.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AnalysisServices/servers/{2}/suspend?api-version=2017-08-01", subscriptionId, resourceGroupName, shortServerName));
                this.responseString = await ServerManagement(apiURI, accessToken);
            }

            return req.CreateResponse(HttpStatusCode.OK, responseString);
        }

        protected async Task<string> GetAccessToken()
        {
            string authority = "https://login.microsoftonline.com/" + tenantID;
            AuthenticationContext authenticationContext = new AuthenticationContext(authority);
            var token = await authenticationContext.AcquireTokenAsync(resourceURI, new ClientCredential(clientID, clientSecret));
            accessToken = token.AccessToken;
            return accessToken;
        }

        protected async Task<string> ServerManagement(Uri url, string token)
        {
            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

            HttpResponseMessage response = await client.PostAsync(url.ToString(), null);
            response.EnsureSuccessStatusCode();
            HttpContent content = response.Content;

            string json;
            json = await content.ReadAsStringAsync();
            return json;
        }

        protected async Task<string> GetServerStatus(string token)
        {
            var url = new Uri(string.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AnalysisServices/servers/{2}?api-version=2017-08-01", subscriptionId, resourceGroupName, shortServerName));

            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
            HttpResponseMessage response = await client.GetAsync(url.ToString());

            response.EnsureSuccessStatusCode();
            string sJson = await response.Content.ReadAsStringAsync();
            var dictResult = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(sJson);
            if (!dictResult.ContainsKey("properties")) return null;
            var dictProperties = dictResult["properties"] as Newtonsoft.Json.Linq.JObject;
            if (dictProperties == null || !dictProperties.ContainsKey("state")) return null;
            serverStatus = Convert.ToString(dictProperties["state"]);
            return serverStatus;
        }
    }
}
使用系统;
使用System.Threading.Tasks;
使用Microsoft.Azure.WebJobs;
使用Microsoft.Azure.WebJobs.Extensions.Http;
使用Microsoft.Extensions.Logging;
使用System.Net.Http.Header;
Net系统;
使用System.Net.Http;
使用System.Collections.Generic;
使用Microsoft.IdentityModel.Clients.ActiveDirectory;
命名空间管理器
{
公共类管理器
{
字符串accessToken=null;
字符串responseString=null;
字符串serverStatus=null;
字符串serverFullURI=Environment.GetEnvironmentVariable(“FULL_SERVER_URI”);
静态字符串shortServerName=Environment.GetEnvironmentVariable(“SHORT_SERVER_NAME”);
字符串resourceURI=”https://management.core.windows.net/";
字符串clientID=Environment.GetEnvironmentVariable(“客户端ID”);
字符串clientSecret=Environment.GetEnvironmentVariable(“CLIENT_SECRET”);
字符串tenantID=Environment.GetEnvironmentVariable(“租户ID”);
静态字符串resourceGroupName=Environment.GetEnvironmentVariable(“资源组名称”);
静态字符串subscriptionId=Environment.GetEnvironmentVariable(“SUBSCRIPTION_ID”);
静态Uri apiURI=null;
[功能名称(“性能”)]
公共异步任务运行(
[HttpTrigger(AuthorizationLevel.Function,“get”,“post”,Route=null)]HttpRequestMessage请求,
ILogger日志)
{    
等待GetAccessToken();
等待GetServerStatus(accessToken);
如果(服务器状态=“暂停”)
{
apiURI=新Uri(string.Format(“https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AnalysisServices/servers/{2}/resume?api版本=2017-08-01“,subscriptionId,resourceGroupName,shortServerName));
this.responseString=等待服务器管理(apiURI、accessToken);
}
如果(服务器状态==“成功”)
{
apiURI=新Uri(string.Format(“https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AnalysisServices/servers/{2}/suspend?api version=2017-08-01“,subscriptionId,resourceGroupName,shortServerName));
this.responseString=等待服务器管理(apiURI、accessToken);
}
返回请求CreateResponse(HttpStatusCode.OK,responseString);
}
受保护的异步任务GetAccessToken()
{
字符串权限=”https://login.microsoftonline.com/“+租户;
AuthenticationContext AuthenticationContext=新的AuthenticationContext(授权);
var token=await authenticationContext.AcquireTokenAsync(resourceURI,new ClientCredential(clientID,clientSecret));
accessToken=token.accessToken;
返回accessToken;
}
受保护的异步任务服务器管理(Uri url、字符串令牌)
{
HttpClient=新的HttpClient();
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
client.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(“承载者”,令牌);
HttpResponseMessage response=wait client.PostAsync(url.ToString(),null);
response.EnsureSuccessStatusCode();
HttpContent=response.content;
字符串json;
json=await content.ReadAsStringAsync();
返回json;
}
受保护的异步任务GetServerStatus(字符串令牌)
{
var url=新Uri(string.Format(“https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AnalysisServices/servers/{2}?api版本=2017-08-01“,subscriptionId,resourceGroupName,shortServerName));
HttpClient=新的HttpClient();
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
client.DefaultRequestHeaders.Authorization=新的AuthenticationHeaderValue(