Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
.net core 无法使用Microsoft.Azure.ServiceBus库在Azure服务总线订阅筛选器上设置基于时间跨度的参数_.net Core_Azureservicebus_.net Standard_Azure Servicebus Subscriptions - Fatal编程技术网

.net core 无法使用Microsoft.Azure.ServiceBus库在Azure服务总线订阅筛选器上设置基于时间跨度的参数

.net core 无法使用Microsoft.Azure.ServiceBus库在Azure服务总线订阅筛选器上设置基于时间跨度的参数,.net-core,azureservicebus,.net-standard,azure-servicebus-subscriptions,.net Core,Azureservicebus,.net Standard,Azure Servicebus Subscriptions,使用较旧的Windows.Azure.ServiceBus库,我可以设置一个以时间跨度作为参数的SqlFilter,但是当我尝试使用Microsoft.Azure.ServiceBus库进行相同操作时,它失败,出现以下错误: 对象的类型不受支持:TimeSpan。只有以下类型是可用的 通过HTTP支持:string、int、long、bool、double、DateTime 我想做的是: 我想订阅两个我的主题高优先级,普通优先级 消息具有名为StartDate的用户属性 如果StartDate库

使用较旧的Windows.Azure.ServiceBus库,我可以设置一个以时间跨度作为参数的SqlFilter,但是当我尝试使用Microsoft.Azure.ServiceBus库进行相同操作时,它失败,出现以下错误:

对象的类型不受支持:TimeSpan。只有以下类型是可用的 通过HTTP支持:string、int、long、bool、double、DateTime

我想做的是:

我想订阅两个我的主题高优先级,普通优先级 消息具有名为StartDate的用户属性
如果StartDate库抛出异常,指出TimeSpan不是受支持的类型,那么它几乎就是您所拥有的类型。请注意,.NET标准客户端有两种实现,管理客户端和一些通过实体客户端(如订阅客户端)执行的操作。后者使用AMQP实现。ManagementClient完全基于HTTP。虽然使用AMQP实现是理想的,但它是不完整的。我建议依赖管理客户。这可能就是为什么使用订阅客户端修改规则会引发异常的原因


关于更好的方法-你的想法听起来不错。只要它不是新客户端不接受的类型。此外,如果您想知道TimeSpan不再受支持的原因,可以在上向库团队提出问题。

为SDK团队创建了一个问题:
SqlFilter highMessagesFilter =
       new SqlFilter("(StartDate-sys.EnqueuedTimeUtc) <= @TimeSpanImmediateWindow");
highMessagesFilter.Parameters.Add("@TimeSpanImmediateWindow", TimeSpan.FromDays(1));

var subscription = SubscriptionClient.CreateFromConnectionString(connectionString,topicName, subName1);
subscription.RemoveRule(RuleDescription.DefaultRuleName);
subscription.AddRule(new RuleDescription()
{
    Name = RuleDescription.DefaultRuleName,
    Filter = highMessagesFilter,
    Action = new SqlRuleAction("set priorityCalc = (StartDate-sys.EnqueuedTimeUtc)")
});
var filter = new SqlFilter("(StartDate-sys.EnqueuedTimeUtc) <= @TimeSpanHoursImmediateWindow");
filter.Parameters.Add("@TimeSpanHoursImmediateWindow",TimeSpan.FromDays(1));

var ruleDescription = new RuleDescription
{
    Filter = filter,
    Action = new SqlRuleAction(@"
        SET HighPriority = TRUE;
        SET Window = StartDate - sys.EnqueuedTimeUtc
        "),
    Name = RuleDescription.DefaultRuleName,

};

await managementClient.UpdateRuleAsync(topicPath,subscriptionName,ruleDescription);
var subClient = new SubscriptionClient(connectionString, topicPath, subscriptionName);

await subClient.RemoveRuleAsync(RuleDescription.DefaultRuleName);
await subClient.AddRuleAsync(ruleDescription);