0

私のウェブアプリはバックグラウンドでいくつかの計算を行う必要があります。複数のソリューションを調査しましたが、すべての計算をトリガーするSQLジョブではなく、ビジネスロジックを使用したいと思います。数日間の調査の後、私はまだ自分のケースに最適な解決策が何であるかを確信していません。

多くの記事で、Quartz.NET、個別のWindowsサービス(ただし、ほとんどの共有Webホストサービスではオプションではないと思います)、Windowsタスクなどについて言及しています...

計算をビジネスロジックに保持するために、計算を自動的に実行してそのアクションの結果を返す専用の「タスク」コントローラーを使用してWebアプリケーションを拡張します。

Q1:Quartz.NETのタイミングWebリクエストを使用してコントローラーを呼び出すことはそれほど難しくありませんが、どうすればそれを保護できますか?[承認]属性を「タスク」コントローラーに追加すると、リクエストがブロックされます。(インターネットWebアプリケーションでフォーム認証を使用していることに注意してください)インターネット上のユーザーが「タスク」コントローラーを起動できないようにします。

Q2:また、共有Webホストサービスが個別のWindowsサービスまたはリモートデスクトップ接続のインストールをサポートしていないと私が考えていることが正しい場合、2つのオプションがあります。

  • 共有WebホストサービスでWindowsタスクがサポートされていることを願っています(ただし、これは認証資格情報を使用して呼び出すことができますか?

  • 私のapplication_startからQuartz.NETを起動します(これは確かに理想的なソリューションではありません...)

前もって感謝します

Kr

4

1 に答える 1

0

まず、スケジュールされたジョブからASP.NETMVCコントローラーを呼び出しません。私はビジネスコンポーネント/サービス(名前が何であれ)に委任し、コンテキストの権限で正しいことを実行していることを確認します。これは、計算が行われた相手に関する情報を使用してジョブを起動し、その情報をサービスコンポーネントに渡すことを意味する可能性があります(ユーザーXの1日の平均を計算します)。ASP.NETMVCスタックを使用して呼び出しをマスカレードすることによる実際のメリットはわかりません。

したがって、Q1:ASP.NET MVCスタックを使用せずに、コードレベルで保護します

Windowsサービスなしでいつでも実行できます。そうすると、使用していないときにアプリプールがシャットダウンするリスクがあります。これを回避する1つの方法は、外部のpingプログラムを使用して、呼び出しが行われたことを確認することです。これは、ご指摘のとおり理想的ではありません。データベースにジョブとトリガーがあると、情報の損失から保護されますが、失火からは保護されません。

Q2:Quartz.NETの実行は、Windowsのスケジュールされたタスクにアクセスするよりもはるかに簡単です。

一部の共有プロバイダーには、実行するコードに対して非常に厳密な設定があります。サンドボックスが厳しすぎると、Quartz.NETがまったく実行されない可能性があります。

于 2012-12-28T08:38:02.700 に答える