2010-12-30 13 views
2

自己ホストWCFサービスを実行しています。サービス設定では、localhostを私のBaseAddressesに使用して、エンドポイントをフックします。 WCFテストクライアントを使用してエンドポイントに接続しようとすると、エンドポイントに接続してマシンの名前を使用してメタデータを取得することに問題はありません。私が遭遇する問題は、メタデータから生成されたクライアントが、接続しようとするエンドポイントURLでlocalhostを使用することです。 localhostがメタデータによって公開されたエンドポイントURLであると仮定しています。その結果、呼び出し側のマシン上のlocalhostがサービスを実行していないため、サービス上のメソッド呼び出しは失敗します。WCFメタデータ公開でのホスト名の自動解決

私が理解したいのは、サービスメタデータが、それを呼び出すクライアントに応じて適切なURLをクライアントに公開できるかどうかです。たとえば、サーバーと同じネットワーク上のマシンからサービスメタデータを要求していた場合、エンドポイントはnet.tcp:// MYSERVER:1234/MyEndpointである必要があります。ネットワーク外のマシンから要求していた場合、URLはnet.tcp://MYSERVER.mydomain.com:1234/MyEndpointである必要があります。そして明らかにクライアントが同じマシンにあった場合、URLはnet.tcp:// localhost:1234/MyEndpointになります。

これはデフォルトのIMetadataExchange契約の欠陥ですか?メタデータがコンテキスト以外の方法で情報を公開する必要があるのか​​?私が望む機能を得るためにBaseAddressesを設定する別の方法はありますか?

おかげで、

マイク

答えて

2

あなたはどのような.NETバージョンを使用していますか?あなたは.NET 4.0を使用している場合は、サービスホストにUseRequestHeadersForMetadataAddressBehaviorを追加します。

UseRequestHeadersForMetadataAddressBehavior urh = 
    new UseRequestHeadersForMetadataAddressBehavior(); 
serviceHost.Description.Behaviors.Add(urh); 

明らかに、これは前にサービスホストを開くに行われる必要があります。

.NET 3.5を使用している場合、この動作を追加する修正プログラムがあります:support.microsoft.com/kb/971842

関連する問題