6

私はインターネットを徹底的に検索し(ほとんどのリンクからstackoverflowに送られました;))、IIS(7.5)でWCFサービスを存続させる方法を考え出しました。

ここでの応答の多くは、WCFサービスを存続させるためにダミーの要求を定期的に送信するアプリケーションを作成することを提案していました。

私の質問は、サービスが最初に呼び出されたときに開始されるスレッドをWCFに作成すると(静的コンストラクターで)、WCF自体を定期的に消費する場合はどうなりますか?

たとえば、c#では次のようになります。

while (true)
{
     WebClient client = new WebClient();
     string returnString = client.DownloadString("http://...");
     Thread.Sleep(1000 * 5);
}

「http://...」が提供されたWebMethodへのURIであり、たとえば整数を返すと仮定します。

それはうまくいくでしょうか?

基本的に、いくつかの操作を実行し、SQL Serverデータベース内の何かを更新するサーバー上で実行されているある種のWebサービス(特にWCFではなくWindowsサービスではない)が必要です。それで、説明されたアプローチが機能しない場合、これを達成するための最良の方法は何でしょうか?

4

5 に答える 5

9

IIS->アプリケーションプール(または新しいアプリケーションプールを作成)->詳細設定に移動し、通常の時間間隔=0を設定します

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

こちらの関連​​スレッドをご覧ください

于 2013-03-06T00:59:11.713 に答える
5

AppFabricを使用すると、自動起動して長持ちするwcfサービスを作成できます。これはホスティングオプションとしてチェックする価値があるかもしれません(IISのプラグインにすぎません)。

自動スタート

于 2013-03-05T22:27:58.383 に答える
2

あなたがしていることは基本的に最初から間違っています。

問題は次のとおりです。IISは基本的にhttpリクエストのステートレスリクエストブローカー(基本IIS)であり、サービスリクエストのリクエストブローカー(IIS w。AppFabric)です。

あなたが求めているのは、本質的にステートレスなIISを、永遠のスレッドが実行されているステートフルサーバーに変える方法です。

これはIISが行うことではなく、IISは要求を処理し、そのAppDomainは常に破棄されます(すべてのスレッドが破棄されます)。

これは、IIS自体が断続的に実行する分解(アプリドメインとスレッドから)を制御せずに、リサイクルプロセスに影響を与える方法を教えてくれるため、最も賛成の回答を危険なものにします。

リクエスターはIIS自体に対して「外部」です。

ただし、サービスの内部存続期間は、IIS(およびそのアプリケーションの構成)自体によって完全に管理されます。

したがって、「生き続ける」とは、常に何らかのサービスを要求することを意味し、アンドレアスがさらに上に提案するように実行します(スケジュールされたジョブを作成します)。

「keepalive」とは、クラスの同じインスタンスがリクエストを処理することを確認するために、WCFの有効期間を調べる必要があることを意味します。

「キープアライブ」とは、作成したコードを「ステートフル」にし、f.eks静的変数を存続させることなどを意味します。IISが基本的にステートレスPRであることを受け入れていません。内部ライフタイム管理を備えたリクエストブローカー。

于 2016-12-08T17:39:17.070 に答える
1

whileループの使用は避けてください。多分http://quartznet.sourceforge.net/はあなたが探しているものです。WCFで、10分ごとにタスクの作成を開始します。これによりWCF自体が計算されます。

于 2013-03-05T22:23:37.590 に答える
1

Webサービスを呼び出す小さなプログラム(コンソールアプリ)を作成することをお勧めします。プログラムは、引数としてWebサービスのURLを取得する必要があります。次に、プログラムを実行するWindowsのスケジュールされたタスクを作成します。このように、プログラムはWebサービスの単なる別のクライアントであるため、クエリを実行している組み込みアプローチと比較して、多くの柔軟性があります。

于 2013-03-05T22:28:52.497 に答える