1

私の状況では、さまざまな時点でエージェントタスクによって起動されるコンソールアプリケーションである「サービスアプリケーション」があります。

今、私の要件は少し変更されており、タスクスケジューラによってのみ実行されると思っていたものは、イントラネット上で実行されているクライアントアプリケーションによって呼び出される必要があります。

1つの問題は、サービスが(クライアントプロファイルではなく).NET 4.0を使用していることです。これをインストーラーに課したくないので、たとえそうしたとしても、異なるバージョンが実行される可能性はありません。このため、コードをライブラリにプッシュするのは間違っているようです。

もう1つの問題は、現在エージェントタスクのスケジュールを制御しているため、サービスの複数のインスタンスが同時にコマンドを実行するように機能を設計しようとしたことがないことです。これに特に依存するロジックはありませんが、すべてが機能すると仮定するのは気が進まないのですが、そのように機能するように設計されていないだけです。

基本的に、私はここで何をする必要があるかを知っています。私が求めているのは、それを達成するための現代的で効率的な方法は何かということです。WCFを見る必要がありますか?私が見落としている本当に簡単な方法はありますか?

これは私がうまくいけばそれをより明確にするために考えていることの写真です。

ここに画像の説明を入力してください

4

1 に答える 1

2

WCF は正しい選択であり、シンプルで強力です。

クライアント プロファイルはそれをサポートしています - http://msdn.microsoft.com/en-us/library/cc716765.aspx

インスタンスとサービスの数は、動作を使用して WCF で制御されます。以下の構成では、同時に実行されるメソッドが 1 つだけであることを保証する必要があります。maxConcurrentCalls="1"同時に複数のメソッドを実行しても問題ないが、1 つのインスタンスのみを実行する必要がある場合は、パラメーターをいじることができます (削除)。

 <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceThrottling 
            maxConcurrentCalls="1" 
            maxConcurrentSessions="1" 
            maxConcurrentInstances="1"
          />
        </behavior>
      </serviceBehaviors>
</behaviors>
于 2012-06-06T03:31:45.680 に答える