У меня есть постоянная проблема, которую я изучаю уже пару дней. Я работаю над переходом службы WCF для использования динамического порта, для этого, наконец, понадобилась необходимость. Я больше всего люблю это; Однако, я получаю сообщение об ошибке:Уже созывается Адрес с помощью схемы net.tcp
System.ArgumentException: This collection already contains an address with scheme net.tcp.
Я искал в Интернете для ответа, и только нашел решение, если схема была HTTP. Я предоставлю некоторый код, чтобы помочь тем, кто хочет помочь мне и другим с этой проблемой.
У меня есть файл services.development.config. У нас есть файл app.config, разделенный по определенным причинам внутри организации.
<service name="MLITS.Pulse.Pulse" behaviorConfiguration="PulseCSBehavior">
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:14613/PulseService"/>
</baseAddresses>
</host>
<endpoint name="NetTcpEndPoint"
address=""
binding="netTcpBinding"
contract="MLITS.Pulse.IPulse" />
<endpoint name="NetTcpMetadataPoint"
address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
У нас также есть адрес конечной точки в файле client.development.config.
<endpoint address="net.tcp://localhost:14613/PulseService" binding="netTcpBinding"
bindingConfiguration="NetTcpEndPoint" contract="PulseService.IPulse" name="NetTcpEndPoint" />
Теперь это мое понимание с помощью метода я использую, я в состоянии сохранить определенный номер порта, указанный здесь, а затем изменить его. Теперь, когда я меняю номер порта, я добавляю идентификатор сеанса к номеру базового порта (который будет 14613). Следующий код - это метод, который делает именно это.
public static void DynamicAddress()
{
int sessionIdentification = 0;
int portNumber = 0;
int newPort = 0;
string uriString = string.Empty;
sessionIdentification = Process.GetCurrentProcess().SessionId;
portNumber = 14613;
newPort = portNumber + sessionIdentification;
uriString = "net.tcp://localhost:" + newPort + "/PulseService";
//seperate the port from the rest of the service
//add the session id to the port
//put the address back together and return it
Uri uri = new Uri(uriString);
ServiceHost objServiceHost = new ServiceHost(typeof(Pulse), uri);
}
Ошибка возникает, когда мы пытаемся обработать линию ServiceHost. Мой вопрос: как мне решить эту проблему, чтобы она функционировала правильно?
Имейте в виду, что я попытался прокомментировать базовые адреса в файле services.development.config, а также адрес конечной точки в файле client.development.config. При этом я столкнулся с другими проблемами, связанными с тем, что я прокомментировал адрес.