1

これで、1 つの ASP.NET MVC アプリケーションができました。ASP.NET MVC アプリケーションには、外部の Windows デスクトップ (私のものではない) アプリケーションから (tcp/ip によって) データを取得するいくつかのメソッドがあります。そして今、このメソッドを外部サービス(プログラム)に移動したいと思います。また、他のメソッド(電子メールメッセージや別のスレッドで実行されている他のプロセスを送信する)にも移動したいと考えています。これは、Web サービス/wcf の初めての経験です。そして、それを行うためのより良い方法は何ですか: wcf、Web サービス、win サービス?
ありがとう

詳細:
ASP.NET MVC アプリでは、外部デスクトップ (私のものではない) アプリケーションから (TCP/IP によって) さまざまな情報を取得します。たとえば、このプログラムでは、映画、スポーツ、劇場、およびそれらのスケジュールなどのイベントを作成します。また、特定のセッションやその他のセッションの残席数。
さまざまな方法でさまざまな種類の情報を取得できます。時々、更新(イベントのリスト、スケジュール)があることを毎分チェックします。キャッシュ用の他の情報 (セッションの残り席数) を取得するために、1 分ごとに必要な場合があります。したがって、以下に説明する別のスレッドとアプローチで多くのタスクを実行しています。

外部の 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 サービス。

4

1 に答える 1

2

ASP.NET アプリケーションで繰り返しバックグラウンド タスクを実装することは避けてください。この機能を実装するには、Windows サービスの方が適しています。

于 2012-05-27T06:41:44.587 に答える