如何更新Azure Notification Hub注册中的到期时间?

时间:2016-09-09 14:29:01

标签: c# azure azure-notificationhub

我一直在使用Azure Notification Hubs。但是,我为一个新项目创建了一个新的通知中心,我注意到了一些非常奇怪的行为。每当我创建注册时,ExpirationDate都会设置为12/31/9999 7:59:59

所以,对于一些人来说,我认为这可能是一个好处,但我想在一段时间不活动之后让我失效。我查看了RegistrationDescription对象并找到了ExpirationTime,但它只读...

我该如何设置?这只是Azure中的一个错误吗?也许我在Azure配置中缺少一个标志?

2 个答案:

答案 0 :(得分:2)

您可以这样做,但在集线器级别上,而不是在注册级别上。查看Improved Per Message Telemetry and device expiry for Notification Hubs博文:

  

要利用此到期更改,只需更新您的   通知枢纽的生存时间属性。这可以通过完成   REST或我们的.NET SDK:

var namespaceManager = NamespaceManager.CreateFromConnectionString("connectionstring");
NotificationHubDescription hub = namespaceManager.GetNotificationHub("foo");
hub.RegistrationTtl = TimeSpan.MaxValue;
namespaceManager.UpdateNotificationHub(hub);

要通过REST API执行此操作,请查看Update Notification Hub方法,该方法需要NotificationHubDescription正文,其中包含RegistrationTtl个节点。这应该是REST代替上面的SDK代码片段。

答案 1 :(得分:1)

文档已经过时,我必须向微软开张票才能在2020年做到这一点。

我创建了一个控制台应用程序,并添加了以下nuget软件包-

https://www.nuget.org/packages/Microsoft.Azure.Management.NotificationHubs https://www.nuget.org/packages/Microsoft.Azure.Management.ResourceManager.Fluent/

安装软件包Microsoft.Azure.Management.NotificationHubs-版本2.3.2-预览版

安装软件包Microsoft.Azure.Management.ResourceManager.Fluent-版本1.34.0

然后我写了这个方法-

    private async Task SetNotificationHubRegistrationTimeToLive()
    {
        // Login to Azure using az login
        // az account set -s <name or ID of subscription> to set the proper subscription
        // Get credentials: "az ad sp create-for-rbac --sdk-auth"
        // See https://docs.microsoft.com/en-us/cli/azure/get-started-with-azure-cli?view=azure-cli-latest and https://docs.microsoft.com/en-us/azure/cloud-shell/quickstart

        var clientId = "ec1b...";
        var clientSecret = "oJJ6...";
        var tenantId = "2b86...";

        var credentials =
                SdkContext
                .AzureCredentialsFactory
                .FromServicePrincipal(
                    clientId,
                    clientSecret,
                    tenantId,
                    AzureEnvironment.AzureGlobalCloud);

        var client = new NotificationHubsManagementClient(credentials)
        {
            SubscriptionId = "yoursubscriptionid"
        };

        var resourceGroupName = "yourgroup";
        var namespaceName = "yournamespace"; // this should NOT be the namespace full name beam-dev-notification-hub-namespace-free.servicebus.windows.net
        var notificationHubName = "yournotificationhub";

        var timeSpan = new TimeSpan(days: 90, hours: 0, minutes: 0, seconds: 0);
        var registrationTtlTimeSpanString = timeSpan.ToString();

        var notificationHub = await client.NotificationHubs.GetAsync(resourceGroupName, namespaceName, notificationHubName);

        await client
              .NotificationHubs
              .CreateOrUpdateAsync(
                resourceGroupName,
                namespaceName,
                notificationHubName,
                new NotificationHubCreateOrUpdateParameters(notificationHub.Location)
                {
                    RegistrationTtl = registrationTtlTimeSpanString
                });
    }

然后您将在https://portal.azure.com/的通知中心属性中看到-

enter image description here