NetTcpBinding(WCF)で空いているTCPポートを見つけるにはどうすればよいですか(サーバーがバインドできるように)

StackOverflow https://stackoverflow.com/questions/1803065

質問

.Netで次のTCPポートを探すこれを未加工の.netで行いますが、WCFでこれを安全に行う方法ではありません。

ユニットテストでは、NetTcpBindingを使用する必要があります。使用しているポートをハードコーディングしたくない

したがって、ServiceHostでNetTcpBindingを使用して自動的に空きポートを選択するにはどうすればよいですか?

選択したポート(または完全なエンドポイントアドレス)を教えてもらうにはどうすればよいですか?

または.NETを使用して、サーバーがバインドするのに有効ないくつかのポートを見つけるにはどうすればよいですか?


賞金が新しい答えにつながらなかったことを考えると、良い答えはないと仮定できると思います。

役に立ちましたか?

解決 6

現時点では、これを行うことはできません。仕事を提供してくれたすべての人に感謝します。

他のヒント

独自のポート検索ロジックを実行する必要はありません-0を指定すると、Windowsは空きポートを選択します。次に、ディスパッチャに問い合わせることにより、どのポートが割り当てられているかを確認できます。

// Specify port 0, this will cause Windows to choose a free port
var baseUri = new Uri("net.tcp://" + Dns.GetHostEntry("").HostName + ":0");
host = new WebServiceHost(typeof(MyService));
var endPoint = host.AddServiceEndpoint(typeof(IMyService), new NetTcpBinding(), baseUri);

 // Tell WCF to actually bind to a free port instead of 0
 endPoint.ListenUriMode = ListenUriMode.Unique;

 host.Open();

 // Now that the host has bound to a specific port, we can find out which one it chose
 return host.ChannelDispatchers.First().Listener.Uri;

ポートをゼロに設定します。これにより、OSは使用可能なポートを選択できます。どのポートが使用されたかを判断する必要がある場合は、ソケットがローカルにバインドされた後、ソケットからクエリを実行できます。

ここで私がしていることは、1025-2000の範囲のランダムなポートから開始することです(範囲は任意に選択されます)。バインドしようとしますが、失敗した場合は例外をキャッチします。次に、ラップするまでポートを1つ上げます( port = port%2000 + 1025 )。ポートがバインドされていないため、テストの失敗をあきらめます。

4年後.. 現在、 MSDN

ここにエンドポイント構成の小さな例

<endpoint address="service"
          binding="netTcpBinding"
          contract="Iservice"
          name="TcpBinding"
          bindingConfiguration="netTcpBindingNoSec"
          listenUriMode="Unique"
          />

そして次の問題:ポートが動的な場合、クライアントはどのようにそれを知ることができますか? この回答に記載されているように、 WCF DISCOVERY :サーバーとサーバーの両方で少し構成が必要です。クライアント側ですが、それはうまく機能します(それを取得するのに数秒かかります、デフォルトでは20秒ですが、5に強制する問題はありません)

ランダムな高ポートを使用すると、プログラムの後に開始したい他のサーバープロセスとの衝突を生成できます。 ポート番号としてゼロを使用し、OSに予約を気にさせます(Unixの/ etc / services、Windowsでの処理方法がわからない)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top