1

私は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サービスをどのように消費して使用できますか?独自のスレッドでサービスを開く必要がありますか?

アイデアは、クライアントが接続する前に、ホストが初期化をトリガーすることです。

4

0 に答える 0