Я не вижу по вашему вопросу, как вы добавляете правильную конечную точку, но я подозреваю, что вы пытаетесь изменить адрес конечной точки.С помощью служб WCF вы не можете вносить изменения в адрес конечной точки после вызова
host.Open();
, поскольку в этот момент служба (если у вас нет ошибок) и принимает запросы от клиентов по указанному адресу и номеру порта.
Вам необходимо создать новый объект ServiceHost с правильным адресом конечной точки (и избавиться от старого), если вы хотите разместить службу по новому адресу.
РЕДАКТИРОВАТЬ:
Изучив пример решения, которое вы опубликовали, я нашел решение этой проблемы.Я думаю, что что-то идет не так, потому что вы используете один и тот же номер порта для обеих попыток (в примере, который я скачал, вы не указываете это, поэтому порт по умолчанию равен 808).Ошибка, с которой вы столкнулись, исчезает, если вы измените свой код следующим образом, чтобы указать другой номер порта в базовом адресе для 2-й попытки:
try
{
var host2 = CreateServiceHost("localhost:5432", serviceImpl);
Console.WriteLine("#2, config: " + host2.BaseAddresses.First().ToString());
host2.Open();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Кажется, что-то глючит под самим WCF, возможноуровень сокета, где порт все еще недоступен после первой ошибки с неправильным IP.
Я быстро прогуглил и нашел эту статью , где кто-то испытывал задержку в повторном использовании порта после закрытия сокета.Если вам всегда нужно использовать один и тот же номер порта, возможно, вы могли бы подождать некоторое время, пока порт снова освободится, прежде чем пытаться снова создать хост службы.