ホストされているのと同じ.exeからWCFサービスに接続しようとしています。サービスを WPF アプリケーションで次のようにホストします。
ServiceHost svc = new ServiceHost(typeof("Namespace.Service"));
svc.Open();
および構成ファイル
<service name="Namespace.Service" >
<endpoint address="Contract/tcp"
binding="netTcpBinding"
contract="Namespace.IContract"/>
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:9002"/>
</baseAddresses>
</host>
</service>
これにより、別の VS インスタンスを起動し、コンソール アプリを作成して、次の操作を正常に実行できます。
IChannelFactory<IContract> facContract = new ChannelFactory<IContract>(new NetTcpBinding());
IContract contract = facContract.CreateChannel(new EndpointAddress("net.tcp://localhost:9002/Contract/tcp"));
string x = contract.GetProperty; //returns value I would expect
ただし、元の WPF ServiceHost コードを次のように修正すると、サービスにアクセスするとタイムアウト例外がスローされます (注: Console App Service ホストで同じことを行うと、タイムアウトが発生しません...) :
ServiceHost svc = new ServiceHost(typeof("Namespace.Service"));
svc.Open();
IChannelFactory<IContract> facContract = new ChannelFactory<IContract>(new NetTcpBinding());
IContract contract = facContract.CreateChannel(new EndpointAddress("net.tcp://localhost:9002/Contract/tcp"));
string x = contract.GetProperty; //<-!!WCF Timeout exception thrown..
WCF トレースは追加の詳細を提供しません (タイムアウト例外がスローされたことを確認するだけです)。何かご意見は?{これは、WCF 例外管理のベスト プラクティスに関する質問ではありません。サービス ホスト内からサービスにアクセスしようとしていますが、この奇妙なタイムアウト例外によってブロックされています}
編集: このタイムアウトは、サービス ホストが WPF アプリケーション (おそらく他のアプリケーション) である場合に発生します。しかし、サービス ホストとしてのコンソール アプリは、期待どおりに動作します (たとえば、自己ホスト型サービスにアクセスできます)。この新しい情報を反映するために、タイトルとタグを更新しました...
前もってありがとう、T