Application_Start のカスタム servicehostfactory を介して、global.asax を使用して serviceroute を wcf サービスにマップする単純なアプリがあります。そのサービスのコンストラクターは、少し時間がかかるサービスをセットアップするための初期処理を行います。
serviceroute が自動的に追加されたときに、このコンストラクターを起動する必要があります。global.asax から clientchannel を作成し、ダミーの呼び出しを行ってサービスを起動しようとしましたが、サービスがまだ起動していないことがわかりました。
では、global.asax を介して最初にマップされたときに、サービスを手動でヒットすることなく、サービスのコンストラクターを起動するにはどうすればよいでしょうか? 残念ながら、AppFabric は私たちのオプションではないため、組み込みの自動起動をそのまま使用することはできません..
アップデート
もう少し詳しく尋ねられました。
これはルーティング管理サービスのようなものです。Service1 があり、global.asax に serviceroute として追加されます。今私はhttp://localhost/Service1を持っています
Service1 内には、「addServiceRoute」というメソッドがあります。呼び出されると、Service2 のルートも登録されます。これでhttp://localhost/Service1/Service2 ができました。
global.asax からの私の最初の解決策は、 http://localhost/service1への channelfactory を構築することでしたが、うまくいきませんでした。Service1 はまだ起動しておらず、Application_Start が返されるまで起動しませんでした (理由はまだわかりません)。そこで、最初の addserviceroute 呼び出しをごまかして、service1 のコンストラクターに移動しようと考えました。また、機能しませんでした。
これはコンストラクターに含めるべきではないと言われました-私は同意します、これはコードをテストしているだけです。
シングルトンについても言及されていましたが、これは問題ないかもしれませんが、マシン (同じアプリ プール内) に Service1 のインスタンスを複数持つつもりなので、うまくいかないと思いますか?
** 更新 #2 ** サンプル コードを求められました..ここでは、global.asax からのものです (簡潔にするために少しトリミングされています)..したがって、http://localhost/Test DOES が表示されます..しかし、使用する必要がある場合appfabric を使用して Test をウォームアップし、そのコンストラクターを起動させる場合、Test.svc などは必要ありませんか? このサービスが存在することをappfabricに確認するにはどうすればよいですか?
protected void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
RouteTable.Routes.Add(
new ServiceRoute("Test", new MyServiceHostFactory(ITestService, BindingType.BasicHttpBinding, true), TestService));
}