0

我一直在尝试基于 Austin Sample 创建一个示例应用程序。首先,我有一个带有示例的 404,我通过调整 App.Config 中的 connectionString 来修复它(我忘了那个,我的错)。现在我创建了第二个接收器,它应该将消息发送到服务总线队列而不是 Azure 表。启动 SampleApplication 和 EventSourceSimulator 时,前两条消息似乎正确传递,但第三条消息显示 404 错误。以下是错误的屏幕截图和我的接收器的类。如果您需要更多信息来帮助我,请告诉我。提前致谢,

奥斯汀 404 错误

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));
    }

更新:我在管理门户的服务总线队列中看不到任何东西,所以我想那里什么也没有。

4

2 回答 2

1

我想你在 (yourservice)/devices 有一个 HttpSource,对吧?问题是,在您的查询中收到两条消息后,我怀疑是输出接收器。因此,您在此地址收到 404,因为整个查询已关闭。请查看您的 StreamInsight 存储帐户中的日志表,您应该在那里看到错误/异常信息。

于 2012-11-19T10:18:04.383 回答
0

您似乎找到了问题的原因。一般来说,如果 HTTP 端点返回 404(可能是在几次成功请求之后),那么您的查询管道中的某些东西很可能发生了故障,正如上面的第一个回复所暗示的那样。在这种情况下,您可以通过连接调试器并检查查询的诊断来获取引发的异常。Austin CTP 软件包(入门文档的一部分)随附的常见问题解答提供了有关此的更多信息。

于 2012-11-19T18:06:41.377 回答