什么是我的任务的最佳选择(wcf,网络服务,赢得服务)

时间:2012-05-27 04:29:11

标签: asp.net-mvc wcf web-services windows-services

现在,我有一个ASP.NET MVC应用程序。我有ASP.NET MVC应用程序中的几种方法,它从外部Windows桌面(不是我的)应用程序(通过tcp / ip)检索数据。现在我想将这些方法移动到外部服务(程序),以及其他方法(发送电子邮件和其他现在在单独的线程中运行的过程)。这是我第一次使用web services / wcf。而且,更好的方法是什么:wcf,网络服务,赢得服务?
感谢

更多细节:
在ASP.NET MVC应用程序中,我从外部桌面(而不是我的)应用程序(通过TCP / IP)获取各种信息。例如,在此程序中创建事件:电影,体育,剧院和他们的日程安排。此外,还有多少席位用于特定会话和其他许多席位 可以以各种方式获得不同类型的信息。有时,我会检查每一分钟是否有更新(事件列表,节目)。有时我需要每分钟获得其他信息(会议剩余多少席位)。因此,我有许多任务是在一个单独的线程和下面描述的方法中执行的。

对于来自外部获胜计划的更新,我使用以下方法:

protected void Application_Start()
{
    AddTask("UpdateFromExternalProgram", "60", 60);
}

private static CacheItemRemovedCallback _onCacheRemove = null;
public static void AddTask(string name, string value,int seconds)
{
    _onCacheRemove = new CacheItemRemovedCallback(CacheItemRemoved);
    HttpRuntime.Cache.Insert(name, value, null,
                       DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration,
                       CacheItemPriority.NotRemovable, _onCacheRemove);
}

    private static  void CacheItemRemoved(string key, object value, CacheItemRemovedReason reason)
   {
        if (reason == CacheItemRemovedReason.Expired)
        {               
               AddTask(key, value.ToString(), Convert.ToInt32(value));
               GetUpdatesFromExternalProgram();               
        }
   }
private static void GetUpdatesFromPremiera()
{
    //creates TCP/IP client, send request, and parse response
}

此外,在一个单独的线程中发送网站上的所有电子邮件(注册,反馈,其他信息):

ThreadPool.QueueUserWorkItem(new WaitCallback(SendEmailInSeparateThread), senderInfo);

并且,我希望将此功能转移到其他应用程序:wcf,Web服务或赢取服务。

1 个答案:

答案 0 :(得分:2)

您应该在ASP.NET应用程序中avoid implementing recurring background tasks。 Windows服务是实现此功能的更好选择。