私はglobal.asaxを使って、application_Startのカスタムservicehostfactoryを介してservicerouteをwcfサービスにマッピングするシンプルなアプリケーションを用意しています。そのサービスのコンストラクタは、少し時間がかかるサービスを設定するための初期処理を行います。サービスを起動せずにglobal.asaxからサービスを開始するにはどうすればよいですか?
servicerouteが自動的に追加されたときに起動するには、このコンストラクタが必要です。私はglobal.asaxからclientchannelを作成し、サービスを起動するためのダミー呼び出しを試みましたが、サービスがまだ起動していないことを発見しました。これはapplication_startが返さなければならないと思われますか?
サービスを手動で起動することなく、最初にglobal.asaxでマップされたときに、サービスのコンストラクタが起動するようにするにはどうすればよいですか?残念ながら、AppFabricのは私たちのためにオプションではありませんので、私はちょうどそれが内蔵されています自動使用することはできません..私は、もう少し詳細を求めた
UPDATE。
これはルーティング管理サービスに似ています。だから私はService1を持っています - それはglobal.asaxのservicerouteとして追加されます。今私は持っているhttp://localhost/Service1
私は 'addServiceRoute'と呼ばれるメソッドがあります。呼び出されると、Service2のルートも登録されます。今私はhttp://localhost/Service1/Service2を持っています。
私の最初の解決策は、channelfactoryをhttp://localhost/service1にすることでしたが、それはうまくいかないでしょう。 Service1はまだ起動しておらず、Application_Startが返されるまでは起動しませんでした(まだなぜなのでしょうか?)。だから、私は騙して、最初のaddserviceroute呼び出しをservice1のコンストラクタに移動すると思った。また、動作しませんでした。
これはコンストラクタ内にあるべきではないと言われました - 私は同意します、これはちょうどテストコードです。
シングルトンも言及されているかもしれませんが、私はそれが動作するとは思わないので、(同じアプリケーションプール内の)マシン上にService1の複数のインスタンスを持つつもりですか?
** 2 ** 私は...サンプルコードのために頼まれた、ここでそれはGlobal.asaxのからあるのでhttp://localhost/Testが出てくるん...(簡潔にするためにビットをトリミング)..しかし、更新#私は、AppFabricのを使用する必要がある場合テストをウォームアップし、そのコンストラクタを起動させるためには、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));
}
もう少し情報を追加できれば、私はあなたを助けることができると思います。アプリケーションプールの開始時にWCFメソッドを呼び出すようにしたいとお考えですか? AppFabricと何が関係しているのですか?これをある種のキャッシュに使用していますか? –
詳細の記事で更新する – XeroxDucati
AppFabricはキャッシング以上の機能を持ち、WCFサービスの管理にも役立ちます。 Auto-Startに関する情報は、http://msdn.microsoft.com/en-us/library/ee677285.aspxを参照してください。 – Rich