私は自己ホストしている WCF サービスを持っています。InstanceContextMode が PerCall に設定されているときは、遅いことを除けば問題なく動作していました。(コンストラクターは非常に重いので、完全に理にかなっています) InstanceContextMode を Single に設定すると、サービスの起動後に正常に動作するようになりました。ただし、サービスがまだ起動中の場合、エンドポイントが見つからないというエラーが発生します。これは、PerCall モードで実行していたときには発生しませんでした。サービスが起動するまでリクエストをより長く待機させる方法はありますか? バインディングで OpenTimeout、ReceiveTimeout、SendTimeout を設定しようとしましたが、役に立ちませんでした。
これは私の呼び出しコードです:
try
{
ChannelFactory<IGatewayService> scf;
var binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;
scf = new ChannelFactory<IGatewayService>(binding, "net.tcp://" + settings.GatewayHost + ":" + settings.GatewayPort);
IGatewayService s;
s = scf.CreateChannel();
result = s.Submit(taskToSubmit);
(s as ICommunicationObject).Close();
}
catch (Exception exc)
{
if (log.IsErrorEnabled) { log.Error("Error submitting task to Gateway", exc); }
}
PS。私は WCF 初心者ですが、皆さんはもうお気づきだと思います ;)