【问题标题】:Access WebJob Information via Microsoft.Azure.Management.Fluent in C#在 C# 中通过 Microsoft.Azure.Management.Fluent 访问 WebJob 信息
【发布时间】:2017-10-20 13:39:31
【问题描述】:

通过 Microsoft.Azure.Management.Fluent 使用信息 我正在尝试获取有关 Web 作业的信息。我可以使用它来获取有关 Web 应用、服务总线、资源组、应用服务等的信息。

但我一直无法找到进入 Web Job 级别的方法。在 Azure 中,Web 作业位于级别

https://ms.portal.azure.com/#resource/subscriptions/{SubId}/resourceGroups/{ApServiceName}/providers/Microsoft.Web/sites/{ApServiceName}/webJobs

使用 Microsoft.Azure.Management.Fluent 我一直无法找到进入 Web Jobs 级别的方法。这可以通过 Microsoft.Azure.Management.Fluent 实现吗?

【问题讨论】:

    标签: c# azure azure-active-directory azure-management-api


    【解决方案1】:

    这可以通过 Microsoft.Azure.Management.Fluent 实现吗?

    根据我的经验,。根据Azure SDK源码,好像没有办法获取WebJob级别。

    如果我们想获得 WebJob 级别,Azure 提供了WebJob API 供我们操作 WebJob。关于WebJob API的授权,可以参考这个blog

    【讨论】:

      【解决方案2】:

      我需要为 WebJobs 执行一些管理 API 代码,发现现在可以了,尽管在 API 文档中很难找到。

      你可以通过安装Microsoft.Azure.Management.AppService.Fluent包来做到这一点(我认为非流利的管理SDK也可以做到这一点,虽然我没有尝试过)。

      可以像这样访问管理 WebJob 的方法:

      using Microsoft.Azure.Management.Fluent;
      using Microsoft.Azure.Management.ResourceManager.Fluent;
      using Microsoft.Azure.Management.ResourceManager.Fluent.Authentication;
      
      class MyWebJobsManagementClass
      {
          public async Task DoSomeWebJobsManagement()
          {
              var jobs = await Azure
                  .Authenticate() // See the docs for how to authenticate with this SDK
                  .WithSubscription("your-subscription-id")
                  .AppServices
                  .Inner 
                  .WebApps
                  .ListWebJobsWithHttpMessagesAsync("resource-group-name", "app-service-name")
          }
      }
      

      通过不明显的AppServices.Inner,您可以获得对IWebAppsOperations 实例的引用,然后您可以在WebJobs 上执行相当多的操作,包括启动和停止它们。

      身份验证附注

      如果您正在寻找一种使用 Azure.Identity 进行身份验证的方法,而不是他们过去用于这些旧 SDK 的基于文件的凭据方法,那么即使不支持“out-盒子”。

      有一个GitHub repo 包含如何实现此目的的示例。我认为它是由 Microsoft 团队的一位开发人员提供的,但并未得到 Microsoft 的正式支持。它没有 NuGet 包,他们建议只复制您需要的位。

      我实际上发现该示例存储库中的代码对于我的需求来说过于复杂,而在我的情况下,我所需要的就是这个。 请注意,我是从我的 F# 项目中复制的,没有对其进行测试,所以我在转换为 C# 时可能会出错,但希望它足够接近,您可以理解

      class AzureIdentityFluentCredentialAdapter : AzureCredentials
      {
          public AzureIdentityFluentCredentialAdapter(string tenantId)
              : base(default(DeviceCredentialInformation), tenantId, AzureEnvironment.AzureGlobalCloud)
          {
          }
      
          public override Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
          {
              var creds = DefaultAzureCredential() // Use the new Azure.Identity library to get access tokens
      
              var accessToken = await creds.GetTokenAsync(
                  new TokenRequestContent(new [] { "https://management.azure.com/.default" }), 
                  cancellationToken);
      
              return await TokenCredentials(accessToken.Token)
                  .ProcessHttpRequestAsync(request, cancellationToken);
          }
      }
      

      这个例子没有做任何令牌缓存,但出于我的目的,我并没有太在意这个。它还对我请求令牌的范围进行了硬编码,因为我知道我只会将它与 Azure 管理 API 一起使用。

      【讨论】:

        猜你喜欢
        • 2010-09-26
        • 2012-01-16
        • 2011-03-07
        • 2023-01-31
        • 1970-01-01
        • 1970-01-01
        • 2011-06-02
        • 1970-01-01
        • 2010-11-12
        相关资源
        最近更新 更多