2017-05-08 62 views
1

訂閱服務總線隊列以接收來自Xamarin應用程序的消息時收到通知的方式是否有任何方法(如果有的話,什麼是最佳方法)?從Xamarin高效訂閱服務總線隊列?

我在一個控制檯應用程序中使用此示例,它工作得很好,但不似乎能夠實例化一個QueueClient在我Xamarin窗體PCL desipite增加了WindowsAzure.ServiceBug Nuget package參考,沒有任何問題:

Console.WriteLine("Receive critical messages. Ctrl-C to exit.\n"); 
var connectionString = "{service bus listen string}"; 
var queueName = "{queue name}"; 

var client = QueueClient.CreateFromConnectionString(connectionString, queueName); 

client.OnMessage(message => 
    { 
     Stream stream = message.GetBody<Stream>(); 
     StreamReader reader = new StreamReader(stream, Encoding.ASCII); 
     string s = reader.ReadToEnd(); 
     Console.WriteLine(String.Format("Message body: {0}", s)); 
    }); 

Console.ReadLine(); 

在Xamarin中有這樣做的首選方法嗎?

編輯

要清楚,我不想郵件投遞到隊列,但訂閱它,會出現一條消息時有效地接收通知。我可以使用REST Api,但是我必須不斷查詢更新,這似乎效率很低。

編輯2

我已經使用長輪詢嘗試,但有一個服務總線隊列作爲調查返回並沒有真正的工作幾乎立即以「204無內容」這意味着我仍然不斷排隊。使用SDK我只能等待消息,並通過我的訂閱得到通知

感謝

+1

的[從Xamarin Azure的ServiceBus窗體PCL]可能的複製(HTTP://計算器.com/questions/39753431/azure-servicebus-from-xamarin-forms-pcl) – Thomas

+0

謝謝@Thomas,但我不想將消息推送到隊列中。我想以最有效的方式進行訂閱,並且理想情況下無需從客戶端連續輪詢服務總線隊列 – LDJ

回答

0

如果我理解正確的,你提到的是不適合的Xamarin平臺的SDK。請嘗試使用Microsoft.Azure.ServiceBus。這是一個預發售版本。

如果我們想OT不斷地輪詢來自客戶端的服務總線隊列,請試試用下面的代碼:

var queueClient = new QueueClient(connectionstring, queueName, ReceiveMode.PeekLock); 

    // Register a OnMessage callback 
    queueClient.RegisterMessageHandler(
     async (message, token) => 
     { 
      // Process the message 
      string messageBody = Encoding.UTF8.GetString(message.Body); 

      // Complete the message so that it is not received again. 
      // This can be done only if the queueClient is opened in ReceiveMode.PeekLock mode. 
      await queueClient.CompleteAsync(message.SystemProperties.LockToken); 
       },new MessageHandlerOptions 
       { 
        MaxConcurrentCalls = 1, AutoComplete = false 
       }); 
相關問題