私はWCFをかなり最近使用しており、要件を達成するための最良の方法を見つけようとしています。次のコードでWCFサービスをホストしているアプリケーションがあります。
Uri u1 = new
Uri("http://localhost:8732/Client1/WcfServiceLibrary1/Service1/"); Uri
u2 = new
Uri("http://localhost:8732/Client1/WcfServiceLibrary1/Service1/mex");
WSHttpBinding binding = new WSHttpBinding();
sHost = new ServiceHost(typeof(WcfServiceLibrary1.Service1), u1);
ServiceMetadataBehavior meta = new ServiceMetadataBehavior();
meta.HttpGetEnabled = true;
sHost.AddServiceEndpoint(typeof(WcfServiceLibrary1.IService1), binding, u1);
sHost.Description.Behaviors.Add(meta); sHost.Open();
クライアントアプリケーションでサービス参照を作成し、このサービスのメソッドを問題なく呼び出すことができます。以下のコードを使用します。
remoteService.Service1Client client = new remoteService.Service1Client();
remote.Text = client.GetData(3);
サービス参照なしでメソッドを呼び出すこともできます。
EndpointAddress myEndpoint = new EndpointAddress("http://localhost:8732/Client1/WcfServiceLibrary1/Service1/");
WSHttpBinding myBinding = new WSHttpBinding();
ChannelFactory<IService1> ServiceConnectionFactory = new ChannelFactory<IService1>(myBinding, myEndpoint);
IService1 serviceConnection = ServiceConnectionFactory.CreateChannel();
ホストアプリケーションで同じコードを実行しようとすると、以下のエラーが発生します。
00:01:00以降、応答を待っている間に要求チャネルがタイムアウトしました。Requestの呼び出しに渡されるタイムアウト値を増やすか、BindingのSendTimeout値を増やします。この操作に割り当てられた時間は、より長いタイムアウトの一部であった可能性があります。
アプリケーションは、現在ホストしているWCFサービスをどのように消費して使用できますか?独自のスレッドでサービスを開く必要がありますか?
アイデアは、クライアントが接続する前に、ホストが初期化をトリガーすることです。