受信メッセージ/接続のみを受け入れる WCF サービスをセットアップしようとしています。
サービスを正常に作成して実行し、このコードを使用してサービスと通信して、WCF エンドポイントを作成することができました (ローカルホストのみに限定されません)。
NetTcpBinding binding = new NetTcpBinding();
binding.Security.Mode = SecurityMode.None;
_host = new ServiceHost(this, new Uri("net.tcp://localhost:19852"));
_host.Description.Behaviors.Add(new ServiceMetadataBehavior());
_host.AddServiceEndpoint(typeof(ISyncClient), binding, "SyncService");
_host.AddServiceEndpoint(typeof(IMetadataExchange), System.ServiceModel.Description.MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
_host.Open();
この行を追加して、localhost からの接続に制限するとすぐに
binding.HostNameComparisonMode = HostNameComparisonMode.Exact;
この例外が発生します
System.ServiceModel.AddressAlreadyInUseException: IP エンドポイント 0.0.0.0:19852 には既にリスナーがあります。これは、このエンドポイントで既にリッスンしている別のアプリケーションがある場合、またはサービス ホストに同じ IP エンドポイントを持つ複数のサービス エンドポイントがあり、バインディング構成に互換性がない場合に発生する可能性があります。---> System.Net.Sockets.SocketException: 通常、各ソケット アドレス (プロトコル/ネットワーク アドレス/ポート) の使用は 1 つだけ許可されます。
私がやっていることがWCFアクセスを制限する正しい方法であるかどうかさえわかりませんが、明らかに機能していません。私には、これは MEX エンドポイントとのある種の競合のように見えます。私の知る限り、mex エンドポイントが必要なので、それを取り除くことはできません。誰かが私に解決策を教えてくれますか?