Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在MVC应用程序中正确处理azure事件中心接收器?_C#_Asp.net Mvc_Azure_Azure Eventhub - Fatal编程技术网

C# 如何在MVC应用程序中正确处理azure事件中心接收器?

C# 如何在MVC应用程序中正确处理azure事件中心接收器?,c#,asp.net-mvc,azure,azure-eventhub,C#,Asp.net Mvc,Azure,Azure Eventhub,我正在Microsoft Azure事件中心上做一个小项目。我需要显示我的Azure订阅到MVC应用程序的活动日志 我能够将事件日志流式传输到服务总线,在从EventHubReceiver接收数据时遇到问题。如果没有数据,接收器似乎会冻结。我知道这是因为eventhubs使用的pub-sub架构,但我希望控制流,因为我使用的是MVC应用程序 现在,我已经使用CancellationToken并显式等待6秒钟,让EventReceiver接收所有消息。有更好的方法吗 public class Ho

我正在Microsoft Azure事件中心上做一个小项目。我需要显示我的Azure订阅到MVC应用程序的活动日志

我能够将事件日志流式传输到服务总线,在从EventHubReceiver接收数据时遇到问题。如果没有数据,接收器似乎会冻结。我知道这是因为eventhubs使用的pub-sub架构,但我希望控制流,因为我使用的是MVC应用程序

现在,我已经使用CancellationToken并显式等待6秒钟,让EventReceiver接收所有消息。有更好的方法吗

public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            var cts = new CancellationTokenSource();
            var list = new List<Record>();
            for (int i = 0; i < 4; i++)
            {
                Task.Factory.StartNew((state) =>
                {
                    var factory = MessagingFactory.CreateFromConnectionString("Endpoint=sb://xcvxcv.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xcvxcvxvxvxcvxcccccccccccccccccccccccccc;TransportType=Amqp");
                    var client = factory.CreateEventHubClient("insights-operational-logs");

                    var group = client.GetDefaultConsumerGroup();
                    var receiver = group.CreateReceiver(state.ToString(), DateTime.Now.AddDays(-1));


                    while (true)
                    {
                        if (cts.IsCancellationRequested)
                        {
                            receiver.Close();
                            break;
                        }
                        var messages = receiver.Receive(10);
                        foreach (var message in messages)
                        {
                            var logMessage = Newtonsoft.Json.JsonConvert.DeserializeObject<LogEventMessage>(Encoding.Default.GetString(message.GetBytes()));
                            list.AddRange(logMessage.records);
                        }
                    }
                }, i);
            }
            Thread.Sleep(5000);
            cts.Cancel();
            return View(list.OrderBy(o => o.time));
        }
    }
公共类HomeController:控制器
{
//到家
公共行动结果索引()
{
var cts=新的CancellationTokenSource();
var list=新列表();
对于(int i=0;i<4;i++)
{
Task.Factory.StartNew((状态)=>
{
var factory=MessagingFactory.CreateFromConnectionString(“Endpoint=sb://xcvxcv.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XCvxVxCvxCccccccccccccc;TransportType=Amqp”);
var client=factory.CreateEventHubClient(“洞察操作日志”);
var group=client.GetDefaultConsumerGroup();
var receiver=group.CreateReceiver(state.ToString(),DateTime.Now.AddDays(-1));
while(true)
{
如果(cts.IsCancellationRequested)
{
receiver.Close();
打破
}
var消息=接收方接收(10);
foreach(消息中的var消息)
{
var logMessage=Newtonsoft.Json.JsonConvert.DeserializeObject(Encoding.Default.GetString(message.GetBytes());
list.AddRange(logMessage.records);
}
}
},i);
}
睡眠(5000);
cts.Cancel();
返回视图(list.OrderBy(o=>o.time));
}
}

我会考虑在EngServsSerix.

中实现EnvidiPrimor主机接口并控制流程。

< P>我会考虑在EngServsAssi.c/P>中实现EngestPosialHub接口并控制流程。

EventProcessorHost似乎正在使用StorageAccount。在没有存储帐户的情况下是否可以执行此操作?存储帐户主要用于存储检查点信息,因此在ProcessEventsAsync中,您执行工作,然后调用检查点。然后,如果您的应用程序失败,您可以从上次检查点开始恢复。另一个参考:这在c#控制台应用程序中运行得非常好,但是如何在mvc中使用它呢?EventProcessorHost似乎在使用StorageAccount。在没有存储帐户的情况下是否可以执行此操作?存储帐户主要用于存储检查点信息,因此在ProcessEventsAsync中,您执行工作,然后调用检查点。然后,如果您的应用程序失败,您可以从上次检查点开始恢复。另一个参考:这在c#控制台应用程序中运行得非常好,但是如何在mvc中使用它呢?