Я столкнулся с проблемой. Я немного новичок в WCF, поэтому любая помощь будет очень признательна.
Вот мой код:
public static void StartHosts()
{
try
{
// Create a new host
ServiceHost host = new ServiceHost(typeof(ServerTasks));
List<IPAddress> ips = new List<IPAddress>(Dns.GetHostAddresses(Dns.GetHostName()));
if (IPAddress.Loopback != null)
ips.Add(IPAddress.Loopback);
ips.RemoveAll(i => i.AddressFamily != AddressFamily.InterNetwork);
foreach (var ip in ips)
{
string uri = string.Empty;
// Formulate the uri for this host
uri = string.Format(
"net.tcp://{0}:{1}/ServerTasks",
ip.ToString(),
ServerSettings.Instance.TCPListeningPort
);
// Add the endpoint binding
host.AddServiceEndpoint(
typeof(ServerTasks),
new NetTcpBinding(SecurityMode.Transport) { TransferMode = TransferMode.Streamed },
uri
);
}
// Add the meta data publishing
var smb = host.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (smb == null)
smb = new ServiceMetadataBehavior();
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
host.AddServiceEndpoint(
ServiceMetadataBehavior.MexContractName,
MetadataExchangeBindings.CreateMexTcpBinding(),
"net.tcp://localhost/ServerTasks/mex"
);
// Run the host
host.Open();
}
catch (Exception exc)
{
DebugLogger.WriteException(exc);
}
}
В строке выдается исключение: 'host.Open ();'
Исключение составляет:
System.InvalidOperationException
Уже существует регистрация для URI «net.tcp: //192.168.1.45: 4329 / ServerTasks».
Я пытаюсь привязать все сетевые адреса на машине, чтобы клиентские приложения могли обращаться к сервису из любой сети, в которой они его видят. Когда я запускаю этот код, он находит и пытается установить привязку примерно для 5 разных IP-адресов, включая 127.0.0.1.
192.168.1.45 - это второй IP-адрес, к которому он пытается привязаться. В тот момент, когда он выдает исключение, я вижу (используя netstat), что программа связалась с первым IP-адресом в списке на порте 4329. Ничто не связано с портом 4329 по адресу, указанному в исключении. *
Извините, подробностей не так много, я хотел дать краткое сообщение. Если кому-то понадобится дополнительная информация, я с радостью ее предоставлю.
Примечание. Я попытался установить для параметра PortSharingEnabled значение true для NetTcpBinding, которая создается внутри цикла foreach, но я все еще сталкивался с той же ошибкой.
Любая помощь или совет будут очень признательны!
Спасибо