Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.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
Azure ServiceBus主题订阅上的SqlFilter未筛选_Azure_Servicebus - Fatal编程技术网

Azure ServiceBus主题订阅上的SqlFilter未筛选

Azure ServiceBus主题订阅上的SqlFilter未筛选,azure,servicebus,Azure,Servicebus,我有一个WinRT应用程序,我正在使用针对Windows8的WindowsAzure工具包。我有一个设置,我希望订阅的客户端忽略发布到ServiceBus主题的消息,如果他们是发起人或者消息比订阅开始时早 在我的BrokeredMessage的属性中,我添加了两项来涵盖这些场景: message.Properties["Timestamp"] = DateTime.UtcNow.ToFileTime(); message.Properties["OriginatorId"] = clientId

我有一个WinRT应用程序,我正在使用针对Windows8的WindowsAzure工具包。我有一个设置,我希望订阅的客户端忽略发布到ServiceBus主题的消息,如果他们是发起人或者消息比订阅开始时早

在我的BrokeredMessage的属性中,我添加了两项来涵盖这些场景:

message.Properties["Timestamp"] = DateTime.UtcNow.ToFileTime();
message.Properties["OriginatorId"] = clientId.ToString();
clientId是一个Guid

订户端如下所示:

// ti is a class that contains a Topic, Subscription and a bool as a cancel flag.

string FilterName = "NotMineNewOnly";

// Find or create the topic.
if (await Topic.ExistsAsync(DocumentId.ToString(), TokenProvider))
{
    ti.Topic = await Topic.GetAsync(DocumentId.ToString(), TokenProvider);
}
else
{
    ti.Topic = await Topic.CreateAsync(DocumentId.ToString(), TokenProvider);
}

// Find or create this client's subscription to the board.
if (await ti.Topic.Subscriptions.ExistsAsync(ClientSettings.Id.ToString()))
{
    ti.Subscription = await ti.Topic.Subscriptions.GetAsync(ClientSettings.Id.ToString());
}
else
{
    ti.Subscription = await ti.Topic.Subscriptions.AddAsync(ClientSettings.Id.ToString());
}

// Find or create the subscription filter.
if (!await ti.Subscription.Rules.ExistsAsync(FilterName))
{
    // Want to ignore messages generated by this client and ignore any that are older than Timestamp.
    await ti.Subscription.Rules.AddAsync(FilterName, sqlFilterExpression: string.Format("(OriginatorId != '{0}') AND (Timestamp > {1})", ClientSettings.Id, DateTime.UtcNow.ToFileTime()));
}

ti.CancelFlag = false;

Topics[boardId] = ti;

while (!ti.CancelFlag)
{
    BrokeredMessage message = await ti.Subscription.ReceiveAndDeleteAsync(TimeSpan.FromSeconds(30));

    if (!ti.CancelFlag && message != null)
    {
        // Everything gets here!  :(
    }

我得到了一切——所以我不确定我做错了什么。解决订阅筛选器问题的最简单方法是什么?

解决问题的最佳方法是使用Paolo Salvatori提供的服务总线资源管理器

他在这方面写了好几篇博文

Windows Azure SDK 1.7确实具有内置功能,但Service Bus Explorer独立版本仍然更好,请参见此处的比较


你的调试

最佳故障排除方法是使用Paolo Salvatori的服务总线浏览器

他在这方面写了好几篇博文

Windows Azure SDK 1.7确实具有内置功能,但Service Bus Explorer独立版本仍然更好,请参见此处的比较


你的调试

创建订阅时,默认情况下会得到一个匹配所有筛选器。在上面的代码中,您只是添加了您的过滤器,以便将其应用于MatchAll过滤器之外,从而接收所有消息。创建订阅后,只需删除$Default筛选器,这将解决此问题。

创建订阅时,默认情况下会得到一个匹配所有筛选器。在上面的代码中,您只是添加了您的过滤器,以便将其应用于MatchAll过滤器之外,从而接收所有消息。创建订阅后,只需删除$Default筛选器即可解决问题。

是的,这就是问题所在。我刚刚发现自己正在使用服务总线浏览器。谢谢是的,这就是问题所在。我刚刚发现自己正在使用服务总线浏览器。谢谢谢谢你的提示。找到了导致问题的$Default规则。感谢您的提示。找到导致问题的$Default规则。