6

私はトピック/サブスクリプション サービスの設定に取り組んでおり、SQLFilter の構文について助けが必要です。これにより、BrokeredMessage プロパティ、特に To プロパティにアクセスできるようになります。メッセージのシステム プロパティにアクセスするための SQL フィルタの正しい構文は何ですか?

このチュートリアルを使用して、必要に応じてトピック/サブスクリプションに送受信できる実際の例があります: https://azure.microsoft.com/en-us/documentation/articles/service-bus-queues-topics-subscriptions/

ただし、今は BrokeredMessage の To プロパティに基づいて、サブスクリプションごとに SQL フィルターをセットアップしたいと考えています。私が従ったチュートリアルでは、「サブスクリプションが作成されると、システム プロパティ (ラベルなど) とカスタム アプリケーション プロパティ (StoreName など) の両方のメッセージのプロパティで動作するフィルター式を指定できます。 .)"

StoreName などのカスタム プロパティを設定すると、次のようになります。

message.Properties.Add("StoreName", "TestMe");

次のような SQL フィルターを使用してサブスクリプションを設定します。

namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("StoreName = 'TestMe'"));

サブスクリプションは期待どおりにフィルター処理されます。しかし、この記事で説明されているように BrokeredMessage オブジェクトの To プロパティ (またはラベル) を使用しようとしても、うまく機能しませんでした。次の SQL フィルターを試してみましたが、うまくいきませんでした。メッセージのシステム プロパティにアクセスするための正しい構文は何ですか?

BrokeredMessage message = new BrokeredMessage();
message.To = "TestMe";

namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("To = 'TestMe'"));
namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("Message.To= 'TestMe'"));
namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("MessageTo= 'TestMe'"));
namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription", new SqlFilter("messageto= 'TestMe'"));

4

1 に答える 1

16

この記事トピックサブスクリプションフィルターから:

SQL フィルタ-受信メッセージのユーザー定義プロパティとシステム プロパティに対してブローカで評価されるSQL に似た条件式SqlFilterを保持します。すべてのシステム プロパティ (すべてBrokeredMessage クラスに明示的にリストされているプロパティ)は、条件式でプレフィックスを付ける必要があります。SQL サブセットは、プロパティの存在のテスト ( )、null 値のテスト ( )、論理/ / 、関係演算子、数値演算、および との単純なテキスト パターン マッチングを実装します。sys.EXISTSIS NULLNOTANDORLIKE

したがって、あなたの場合SqlFiltersys.Toプロパティで を作成する必要があります。

namespaceManager.CreateSubscription("MyNSTestTopic", "TestSubscription",
    new SqlFilter("sys.To = 'TestMe'"));
于 2016-09-02T01:19:34.927 に答える