【问题标题】:What is best choice (wcf, web-service, win service) for my task什么是我的任务的最佳选择(wcf、web-service、win 服务)
【发布时间】:2012-05-27 04:29:10
【问题描述】:

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

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

对于来自外部 win 程序的更新,我使用以下方法:

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 服务或 win 服务。

【问题讨论】:

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


    【解决方案1】:

    您应该在 ASP.NET 应用程序中使用avoid implementing recurring background tasks。 Windows 服务更适合实现此功能。

    【讨论】:

    • 为什么windows服务不是web服务?什么是利弊?
    • 这取决于网络服务类型。但是,如果您在 IIS 中托管此 Web 服务(经典的 ASMX 或 IIS 托管的 WCF 服务),则您使用的是 ASP.NET 应用程序。在这种情况下,请阅读 Phil Haack 文章为什么在 ASP.NET 应用程序中实现重复的后台任务是不好的。 IIS 可以随时回收此 ASP.NET 应用程序,停止所有活动并终止所有线程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    相关资源
    最近更新 更多