2012-11-19 41 views
0

我一直在嘗試創建一個基於奧斯汀示例的示例應用程序。首先,我有一個404樣本,我通過調整App.Config中的connectionString來修復它(我忘了那個,我的壞)。 現在我創建了第二個接收器,它應該將消息發送到服務總線隊列而不是Azure表。 啓動SampleApplication和EventSourceSimulator時,前兩個消息似乎正確傳遞,但第三個消息顯示404錯誤。 以下是錯誤和我的接收器類的屏幕截圖。如果您需要更多信息來幫助我,請告訴我。 由於提前,StreamInsight奧斯汀示例服務總線404

Austin 404 Error

public class ServiceBusQueueSink<TEvent> 
{ 
    readonly QueueClient _queueClient; 
    readonly NamespaceManager _namespaceManager; 
    readonly string _connectionString; 
    readonly string _queueName = "DeviceErrorsQueue"; 
    readonly string _errorType; 
    readonly bool _storeCtis; 

    ServiceBusQueueSink(string errorType, bool storeCtis) 
    { 
     _errorType = errorType; 
     _storeCtis = storeCtis; 

     // Configure Queue Settings 
     QueueDescription qd = new QueueDescription(_queueName); 
     qd.MaxSizeInMegabytes = 2048; 
     qd.DefaultMessageTimeToLive = new TimeSpan(0, 1, 0); 

     // Create the queue if it does not exist already 
     _connectionstring = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); 

     _namespaceManager = NamespaceManager.CreateFromConnectionString(_connectionString); 

     if (!_namespaceManager.QueueExists(_queueName)) 
     { 
      _namespaceManager.CreateQueue(_queueName); 
     } 

     _queueClient = QueueClient.CreateFromConnectionString(_connectionString, "DeviceErrorsQueue"); 

    } 

    /// <summary> 
    /// Write each received event into the service bus queue. 
    /// </summary> 
    /// <param name="e">Event to write.</param> 
    public void OnNext(PointEvent<TEvent> e) 
    { 
     bool send = false; 
     if (e.EventKind == EventKind.Cti) 
     { 
      if (_storeCtis) 
       send = true; 
      else 
       send = false; 
     } 
     else 
      send = true; 

     if (send) 
     { 
      BrokeredMessage message = new BrokeredMessage(e); 
      message.Properties["ErrorType"] = _errorType; 
      _queueClient.Send(message); 
     } 
    } 

    /// <summary> 
    /// Static method that returns a new Service Bus Queue sink observer. 
    /// </summary> 
    /// <param name="storageConnection">Service Bus Queue connection string.</param> 
    /// <param name="errorType">Type of error to be saved in properties of brokeredmessage.</param> 
    /// <param name="storeCtis">Flag specifying whether to also persist CTI events.</param> 
    /// <returns></returns> 
    public static IObserver<PointEvent<TEvent>> CreateObserver(string errorType, bool storeCtis) 
    { 
     var res = new ServiceBusQueueSink<TEvent>(errorType, storeCtis); 
     return Observer.Create<PointEvent<TEvent>>(e => res.OnNext(e)); 
    } 

更新:我沒有看到在管理門戶在服務總線隊列什麼,所以我想沒有到達那裏。

回答

1

我想你在(yourservice)/ devices上有一個HttpSource,對不對? 問題是,在收到兩條消息後,查詢中斷了一些東西,我懷疑是輸出接收器。因爲你在這個地址收到404,因爲整個查詢被關閉了。請查看StreamInsight存儲帳戶中的日誌表,您應該在那裏看到錯誤/異常信息。

+0

我確實在這個地址有一個HttpSource,我保持它與Sample中的一樣,並且使用azureTableSink一切都很完美。這確實是我的水槽問題,但我找不到。在查看我的存儲空間時,我看到很多表格,但沒有用於該帳戶的可登錄。我有一個WADWindowsEventLogsTable和siXWADLogsTable,但它們不包含任何有用的信息。 – hhoud

+0

這是我的一個愚蠢的錯誤,但你的回答讓我想到了正確的方向。 我無法使用StreamInsight Even Flow調試器,但我修復了它(我沒有正確配置文件...),然後發現我忘記了在部署時將Microsoft.ServiceBus.dll添加到包中... – hhoud

0

看起來你發現你的問題的原因。一般情況下,如果HTTP端點返回404(可能在幾次成功的請求之後),那麼您的查詢管道中的某些內容可能會爆炸,正如上面的第一個回覆所示。在這種情況下,您可以通過連接調試器並檢查查詢的診斷來獲取拋出的異常。 Austin CTP軟件包(入門文檔的一部分)附帶的常見問題解答提供了有關該信息的更多信息。