Я пытаюсь изменить номер порта, на котором прослушивается моя самообслуживаемая служба WCF. Для этого я попытался остановить ServiceHost, добавив новую ServiceEndpoint с новым портом и перезапустив ServiceHost. Однако это не работает, и он бросает это исключение:Как изменить номер порта NetTcpBinding ServiceEndpoint, зарегистрированного в ServiceHost
System.InvalidOperationException: Endpoints не может быть добавлен после того, как ServiceHost был открыт/неисправным/прерванным/закрыто.
Вот мой тестовый код:
[Fact]
public async Task IsRunning_ForServerRunning_IsTrue()
{
server.Close();
var newPortNumber = 6767;
server.Open(newPortNumber);
Assert.True(server.IsRunning);
}
и это AutomationServer
:
public class AutomationServer : IAutomationServer
{
private ServiceHost svh;
private IAutomationService service;
public AutomationServer(IAutomationService service)
{
svh = new ServiceHost(service);
}
public void Open(int port = 0)
{
Open(port, null);
}
public void Open(int port, string host)
{
//if (port != 0)
this.port = port;
if (host == null)
host = Dns.GetHostEntry("").HostName;
var baseUri = new Uri("net.tcp://" + host + ":" + this.port);
Open(baseUri);
}
public void Open(Uri baseUriAddress)
{
var serviceEndpoint = svh.AddServiceEndpoint(
typeof(IAutomationService),
new NetTcpBinding(),
baseUriAddress);
if (baseUriAddress.Port == 0)
AutoAssignPortNumber(ref serviceEndpoint);
svh.Open();
IsRunning = true;
}
private void AutoAssignPortNumber(ref ServiceEndpoint serviceEndpoint)
{
serviceEndpoint.ListenUriMode = ListenUriMode.Unique;
}
public void Close()
{
svh.Close();
IsRunning = false;
}
... properties, etc.
}
Так это правильный способ просто «отбросить» старую ServiceHost и создать новый ServiceHost с новое связывание в ServiceEndpoint или мне что-то не хватает?