Я создаю WCF ServiceHost
с портом 0, чтобы получить динамически назначенный порт:
ServiceHost host = new ServiceHost(typeof(MyClass), new Uri("net.tcp://localhost:0/abc"));
host.AddServiceEndpoint(typeof(MyInterface), new NetTcpBinding(SecurityMode.None), "net.tcp://localhost:0/abc");
Как мне присвоить номер порта?
Я пытался:
host.ChannelDispatchers[0].Listener.Uri.Port
но он просто возвращает 0, что, по-видимому, неверно.
Хорошо, я думаю, что понял. Вы должны убедиться, что поведение URI прослушивания установлено на уникальное, а также открыть его. По умолчанию он установлен в явном виде.
Я сделал фиктивный класс обслуживания, который содержал следующий контракт на обслуживание:
[ServiceContract]
public class MyClass
{
[OperationContract]
public string Test()
{
return "test";
}
}
И добавил соответствующий тестовый класс:
[TestClass]
public class TestMyClass
{
[TestMethod]
public string TestPortIsNotZero(){
var host = new ServiceHost(typeof(MyClass),
new Uri("net.tcp://localhost:0/abc"));
var endpoint = host.AddServiceEndpoint(typeof(MyClass),
new NetTcpBinding(SecurityMode.None), "net.tcp://localhost:0/abc");
//had to set the listen uri behavior to unique
endpoint.ListenUriMode = ListenUriMode.Unique;
//in addition open the host
host.Open();
foreach (var cd in host.ChannelDispatchers)
{
//prints out the port number in the dynamic range
Debug.WriteLine(cd.Listener.Uri.Port);
Assert.IsTrue(cd.Listener.Uri.Port >= 0);
}
}
}
OperationContext.Channel.LocalAddress.Uri.Port