gpt4 book ai didi

c# - 已发布的 ASP.NET MVC 网站中的计时器问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:02 24 4
gpt4 key购买 nike

我有一个在 Azure 上发布的网站(作为应用服务),该网站是使用 ASP.NET MVC、SQL、EF6 技术堆栈开发的。

我的项目中有一个类,它不断地 ping 服务总线队列以获取新消息。

如果服务总线队列中有新消息,它应该获取该消息并登录到数据库中。

问题是,当我发布到 Azure 时,该类无法正常工作并且始终无法读取消息。

有更好的解决方案吗?

最佳答案

对于您的场景,您可以创建一个后台任务来监听服务总线队列中的消息,然后检索消息并将其保存到数据库中。例如,您可以在 Global.asax.cs 文件下定义 _maunalResetEvent:

private static ManualResetEvent _maunalResetEvent = new ManualResetEvent(false);

并在Global.asax.csApplication_Start事件下添加以下代码。

    ThreadPool.QueueUserWorkItem(_ =>
{
var connectionString = "";
var queueName = "samplequeue";
var client = QueueClient.CreateFromConnectionString(connectionString, queueName);
client.OnMessage(message =>
{
var messageBody = message.GetBody<String>();
System.Diagnostics.Trace.TraceInformation(String.Format("Message body: {0}", messageBody));

//TODO: save the message to the database
});
_maunalResetEvent.WaitOne();
});

此外,您可以像 Joe Wilson 回答的那样使用 Azure Functions,并使用 Azure Service Bus bindings for Azure Functions用于基于事件的消息处理,而不是创建计时器或调度程序来手动检索队列消息。此外,您可以利用 WebJobs 来实现您的场景,详细信息您可以关注 How to use Azure Service Bus with the WebJobs SDK .

此外,对于托管在 Azure 应用程序服务上的情况,您的应用程序将在几分钟(默认情况下为 20 分钟)不活动后进入空闲状态。因此,您需要启用始终开启选项。 注意:您可以在基本或更高版本的应用服务计划中启用始终开启以使您的应用始终处于加载状态。详情可关注here .

关于c# - 已发布的 ASP.NET MVC 网站中的计时器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48940710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com