通过C#中的Microsoft.Azure.Management.Fluent访问WebJob信息

时间:2017-10-20 13:39:32

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

通过Microsoft.Azure.Management.Fluent使用信息我正在尝试获取有关Web Jobs的信息。我可以用它来获取有关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作业级别的方法。这可以通过Microsoft.Azure.Management.Fluent吗?

2 个答案:

答案 0 :(得分:0)

  

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

根据我的经历,。根据{{​​3}}源代码,似乎没有办法获得WebJob级别。

如果我们想要获得WebJob级别,Azure会为我们提供Azure SDK以在WebJob上运行。关于WebJob API的授权,我们可以参考此WebJob API

答案 1 :(得分:0)

我需要为 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 的基于文件的凭据方法,那么即使不支持,也有一种方法可以实现这一点“开箱即用”。

有一个 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 一起使用。