在Web应用程序MVC

时间:2019-02-28 09:25:59

标签: javascript c# asp.net asp.net-mvc asp.net-mvc-4

我有一个基本上像这样的脚本:

<script>
// Send transaction data with a pageview if available
// when the page loads. Otherwise, use an event when the transaction
// data becomes available.
dataLayer.push({
  'ecommerce': {
    'purchase': {
      'actionField': {
        'id': 'T12345',                         // Transaction ID. Required for purchases and refunds.
        'affiliation': 'Online Store',
        'revenue': '35.43',                     // Total transaction value (incl. tax and shipping)
        'tax':'4.90',
        'shipping': '5.99',
        'coupon': 'SUMMER_SALE'
      },
      'products': [{                            // List of productFieldObjects.
        'name': 'Triblend Android T-Shirt',     // Name or ID is required.
        'id': '12345',
        'price': '15.25',
        'brand': 'Google',
        'category': 'Apparel',
        'variant': 'Gray',
        'quantity': 1,
        'coupon': ''                            // Optional fields may be omitted or set to empty string.
       },
       {
        'name': 'Donut Friday Scented T-Shirt',
        'id': '67890',
        'price': '33.75',
        'brand': 'Google',
        'category': 'Apparel',
        'variant': 'Black',
        'quantity': 1
       }]
    }
  }
});
</script>

基本上,我需要在代码中执行此脚本,该脚本将由计划任务每​​xx小时(可能每4小时)触发一次。

API链接:

https://developers.google.com/tag-manager/enhanced-ecommerce#purchases

我感兴趣的部分是:

衡量购买

基本上,因为我找不到用于c#或PHP的任何实现,所以我决定走这条路线,在后台执行javascript ...

我认为它可能是这样的:

private void ExecuteMyScript(){
// Now to execute the script above ...
}

此方法将由计划的任务每4小时触发一次。

这在.NET MVC中可行吗?这是我第一次遇到这样的事情,因此所有的帮助和建议都将受到欢迎。

2 个答案:

答案 0 :(得分:1)

您可以使用Java脚本的setInterval()从客户端进行重复。例子

setInterval(
    function(){ 
        alert("Hello World"); // Replace this line with your code that you want to repeat every 3 seconds.
    }, 
    3000
);

或者您在后端实施计划的任务并实施发布订阅模式。 Java脚本通过其回调函数从服务器预订排定广播的位置。如果您要寻找它,可以有很多方法,但由于我自己也没有尝试过,因此我不知道推荐哪种方法。有关实现“实时” /“可订阅的” api端点的信息,请参见SignalR,WebSockets等。我只能在下面为您提供一个伪代码来说明这个想法。

// C# backend part
namespace ScheduledTask
{
    public class NotificationTask
    {
        // Some kind of an event emitter class
        public Event notificationEvent; 
        // Some kind of Scheduler/Timer class library
        private ScheduleTimer scheduler;

        // Run()
        public void Run(IScheduledTask sheduledTask)
        {
            scheduler.start(timeout);
        }

        // timeout()
        private void timeout(data)
        {
            // emit event / notify
            notificationEvent.broadcast(data);
        }
    }
}


// JavaScript frontend part
// Subscribe to endpoint
api('/notification/id=1').subscribe(function(notification){
    // Do something with data received
});

答案 1 :(得分:1)

这当然是可能的,并且您有很多选择……看到您使用的是 ASP.NET MVC ,我假设您使用的是Windows操作系统。您可以创建Windows服务并每4小时执行一次计划的工作...

对于我的应用程序(电子商务网站上也是如此),我使用Topshelf编写了Windows服务,该服务每5分钟运行一次...但是您不必使用topshelf编写Windows服务,您只需创建一个Windows Service app

根据您的托管环境,您还有其他选择...如果您的网站托管在AWS上,则可以创建AWS Lambda function并将lambda函数配置为及时运行。