0

受信メッセージ/接続のみを受け入れる 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 エンドポイントが必要なので、それを取り除くことはできません。誰かが私に解決策を教えてくれますか?

4

1 に答える 1

2

これを行う簡単な方法は、名前付きパイプ バインディングを使用することです。市内通話のみをサポートします。交通手段の選択から:

1 台のコンピューター上の異なる WCF アプリケーション間で通信が必要な場合に、別のコンピューターからの通信を禁止するには、名前付きパイプ トランスポートを使用します。

また、Mex ポイントは完全にオプションです。問題なくエンドポイントと動作を取り除くことができます。

于 2012-09-12T00:49:12.937 に答える