2017-01-24 6 views
0

サンプルのAzure Service Busアプリケーションを作成しています。名前空間、トピック、サブスクリプションを作成しました。トピックにテストメッセージを書きました。ポータルでサブスクリプションに行くと、ライターアプリケーションを使用して新しいメッセージを書き込むたびに新しいメッセージが表示されます。サービスバスがサブスクリプションから読まない

しかし、私がメッセージを引き出すには、何も検索されません。トラブルシューティングで、私はサブスクリプション名を間違った値に変更し、エラーを受け取りました。私はそれを元に戻し、出力は得られず、Azureポータルを見るとメッセージは消えません。私は立ち往生しています...これは簡単だと思われますが、うまくいきません。

string connectionString = "Endpoint=sb://redacted for obvious reasons"; 

     SubscriptionClient Client = SubscriptionClient.CreateFromConnectionString(connectionString, "NewOrders", "AllOrders"); 

     // Configure the callback options. 
     OnMessageOptions options = new OnMessageOptions(); 
     options.AutoComplete = false; 
     options.AutoRenewTimeout = TimeSpan.FromMinutes(1); 

     Client.OnMessage((message) => 
     { 
      try 
      { 
       Console.WriteLine("Body: " + message.GetBody<string>()); 

       message.Complete(); 
       Console.ReadLine(); 
      } 
      catch (Exception) 
      { 
       // Indicates a problem, unlock message in subscription. 
       message.Abandon(); 
      } 
     }, options); 
+0

サブスクリプションAllOrdersの設定方法を教えてください。 GitHubであなたのコードの復習を共有できますか? –

+0

コンソールアプリケーションを実行していますか?あなたは、アプリケーションを終了させないスレッドをブロックしますか? – Thomas

答えて

0

コードの問題ではないようです。トピックからメッセージを取得するためのデモを作成します。正しく動作します。 トピックからメッセージを取得しようとする前に、トピックにメッセージを送信するか、サブスクリプションのメッセージがあることを確認します。私たちは、ポータル

enter image description here

からメッセージコードのデモを送っていることを確認できました。

private static void SendMessages() 
{ 
    topicClient = TopicClient.Create(TopicName); 

    List<BrokeredMessage> messageList = new List<BrokeredMessage> 
    { 
     CreateSampleMessage("1", "First message information"), 
     CreateSampleMessage("2", "Second message information"), 
     CreateSampleMessage("3", "Third message information") 
    }; 

    Console.WriteLine("Sending messages to topic..."); 
    foreach (BrokeredMessage message in messageList) 
    { 
     while (true) 
     { 
      try 
      { 
      topicClient.Send(message); 
      } 
      catch (MessagingException e) 
      { 
       if (!e.IsTransient) 
       { 
        Console.WriteLine(e.Message); 
        throw; 
       } 
      } 
      Console.WriteLine($"Message sent: Id = {message.MessageId}, Body = {message.GetBody<string>()}"); 
      break; 
     } 
    } 

     topicClient.Close(); 
} 

私もあなたの言及したコードを試してください、それはまた私のために正しく動作します。

enter image description here

enter image description here

我々はまた、テンプレートからクラウドプロジェクトからデモプロジェクトを得ることができます。また、文書からHow to use Service Bus topics and subscriptionsの情報を得ることもできます。

関連する問題