0

クライアントのために新しいプロジェクトを開始しています。これは、Web UI (非常に多くのユーザー) + デスクトップ UI (少数のユーザー) を備えた一種の大きなシステムになります。

私は考えていた。すべてのロジックを Windows サービスまたは IIS でホストする必要がありますか?

アプリケーションはバックグラウンドで多くの操作を実行できます (インポート、エクスポート、レポート用データの準備)。Web クライアント (ASP.NET MVC) とデスクトップ クライアント (およびその他のクライアント) は、ServiceStack /WCF を介してサービスに接続します。

4

2 に答える 2

2

同じASP.NETアプリケーションでバックグラウンドサービスを実行する

ServiceStackを使用する場合は、 WebサービスAPIとバックグラウンドサービスを同じASP.NETWebアプリケーションでホストできます。ServiceStackは、このストーリーをサポートしています。IMessageService登録されている場合、すべてのOneWay Async HTTP呼び出しは自動的に延期され、登録されたMQサービスに公開されます(たとえば、Redis MQの場合、RequestDTOはServicesMQ受信ボックスで公開されます)。

さまざまなASP.NETアプリケーションでのバックグラウンドサービスの実行

ASP.NETホストの展開はWindowsサービスよりもASP.NETアプリケーションの方が簡単なので、StackOverflow Careersでは、BackOfficeサービスを個別のASP.NET Webアプリケーション(公開されていません)に分割することを選択しました。

一方向メッセージの場合、インターネット向けのキャリアWebサイトはRequest DTOをRedisにドロップし、 ServiceStackのRedisMQServerによって処理されます。通常の応答サービスの場合、Request DTOを再利用し、型指定されたC#サービスクライアントの1つを使用してServiceStackWebサービスを直接呼び出すことができます。

ServiceStackを使用する利点の1つは、組み込みのメッセージングAPIが既存のWebサービスを再利用できるため、特定のMQのみのサービスを開発しなくてもメッセージングの利点を享受できることです。

MQサービスが常に実行されていることを確認する

ASP.NETホストではバックグラウンドスレッドの実行が少し不安定になるため、Global.asaxにこれを追加してmqHost.Start()、すべての要求の最後に呼び出し、何らかの理由で強制終了された場合にMQServerメインスレッドを開始します。

protected void Application_EndRequest(object sender, EventArgs e)
{
    //If the MQ Host goes down for whatever reason, restart it
    if (appHost == null) return;
    var mqHost = appHost.TryResolve<IMessageService>();
    if (mqHost != null)
        mqHost.Start();
}

これは通常はNo-Opですが、何らかの理由でマスターバックグラウンドスレッドが強制終了された場合は、再度起動します。

Windowsサービスでのバックグラウンドサービスの実行

Windowsサービスを実行すると、AppDomainの再起動やASP.NET要求の制限を受けないため、バックグラウンドサービスにとっておそらく理想的な環境になります。Windowsサービスの展開とデバッグは難しく、クロスプラットフォームではないため、必要な場合を除いて、通常は避けています。ただし、このルートをたどりたい場合は、ServiceStackのWindowsサービスデモプロジェクトを確認する必要があります。

于 2012-09-21T22:43:12.910 に答える
1

そうです:

WCF サービス (http、tcp、要件が何であれ) からアクセスされるビジネス ロジック

マルチスレッドを使用するかどうかに関係なく、負荷の高いバックグラウンド タスクに使用される Windows サービス (巨大な xml ドキュメントの解析、ファイルからのビッグ データの抽出、時間のかかるシステム統合など...)

http を介して要求および応答される軽いバックグラウンド タスクを処理する UI (asp.net mvc を使用して WCF サービスを使用するか、UI スタッフを実行する)

于 2012-09-21T20:15:08.500 に答える