編集/序文: この回答は、ソフトウェア スタック全体の通信ではなく、プロセスとのユーザー インタラクションのみにWCF を使用すること、およびコア作業は長時間実行されるサービス自体によって行われることを前提としています。
はい、これは WCF で実行可能であり、おそらく適切なソリューションです。相互運用プロパティのセットを頻繁にクエリ/更新する長時間実行プロセッサ スレッドがあります (たとえば、完了率、作業中の項目を更新し、「一時停止」フラグなどを確認します)。 .)。これらのプロパティは、WCF インターフェイス メソッドによってクエリ/設定されます。
シングルトン パターンはこれに最適です。スレッドが正しくセットアップされている場合、ユーザーは長時間実行されるスレッド (または複数のスレッド) がチェックするいくつかのプロパティと対話します。
非常に高いレベルの観点から、プロセッサ クラスはおそらくコアで次のようになります (これは、それがどのように実行されるかの単なるモデルです。このように正確に作成しないでください。そうしないと、悪夢に見舞われます)。
// IWcfProcessor is the ServiceContract interface
// Processor runs as a singleton and does (or has a thread that does) the processing work
class Processor : IWcfProcessor
{
public Processor()
{
new Thread(Process).Start();
}
public void Process()
{
while (Run)
{
// Do long-running process stuff, update some tables
PercentDone += 0.1;
}
}
public decimal PercentDone { get; set; }
public bool Run { get; set; }
/// WCF method defined in IWcfProcessor
public void SetState(bool state)
{
Run = state;
}
/// WCF method defined in IWcfProcessor
public decimal GetStatus()
{
return PercentDone;
}
}
IWcfProcessor
次に、Web またはアプリケーション エンドポイントからタッチポイントにフックできます。
また、たとえば、1 人のユーザーが同時にインポート プロセスを開始/停止しようとした場合などに問題が発生する可能性はありますか?
スレッドの相互運用を正しく設定していれば、問題は発生しません。
シングルトン パターンは、誰もが同じ単一のインポート プロセスで作業できるようにするためのアプローチですか?
はい、これで完璧です。