У нас есть служба WCF
var address = string.Format("net.tcp://{0}", _settings.ServerAddress);
var binding = new NetTcpBinding(SecurityMode.None) { HostNameComparisonMode = HostNameComparisonMode.Exact };
var service = new LicenseService();
_host = new ServiceHost(service);
_host.AddServiceEndpoint(typeof(ILicenseService), binding, address);
_host.AddServiceEndpoint(typeof(ILicenseServiceAdmin), binding, address);
_host.Description.Behaviors.Add(behavior);
_host.Description.Behaviors.Add(throottling);
_host.AddServiceEndpoint(new UdpDiscoveryEndpoint());
_host.Description.Behaviors.Add(new ServiceDiscoveryBehavior());
_host.Open();
и клиент
var searchCriteria = new FindCriteria(typeof(Utils.Licensing.ILicenseService));
_discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
_discoveryClient.FindProgressChanged += Client_FindProgressChanged;
_discoveryClient.FindCompleted += Client_FindCompleted;
_discoveryClient.FindAsync(searchCriteria, _syncObject);
. Она отлично работает для всех наших клиентов, кроме одного, который недавно сообщил о следующей ошибке:
System.Net.Sockets.SocketException (0x80004005): Ein ungültiges Аргумент wurde angegeben в System.Net.Sockets.Socket..ctor (AddressFamily addressFamily, SocketType socketType, ProtocolType protocolTypeMilePlayer для вашего сервиса) в System.Sep. .CreateListenSocket (IPAddress ipAddress, Int32 & port, Int32 receiveBufferSize, Int32 timeToLive, Int32 interfaceIndex, логическое значение allowMulticastLoopback, логическое значение isLoopbackAdapter) в System.ServiceModel.Channels.UdSendMileNelectSenseEckSense для объекта.Channels.UdpChannelFactory'1.OnCreateChannel (EndpointAddress to, Uri via) в System.ServiceModel.Channels.ChannelFactoryBase'1.InternalCreateChannel (адрес EndpointAddress, Uri через) в System.ServiceModel.ChannelFacterviceChannelFactoryOverDuplex.CreateInnerChannelBinder (EndpointAddress к, Ури через) в System.ServiceModel.Channels.ServiceChannelFactory.CreateServiceChannel (EndpointAddress адрес, Ури через) в System.ServiceModel.Channels.ServiceChannelFactory.CreateChannel (тип ChannelType, EndpointAddress адрес, Ури через) в системе. ServiceModel.DuplexChannelFactory'1.CreateChannel (InstanceContext callbackInstance, EndpointAddress address, Uri via) в System.ServiceModel.ClientBase'1.CreateChannel () в System.ServiceModel.ClientBase'1.CreateCodenel.liviceCliviceCliviceCliviceCliviceIner.)get_Channel () в System.ServiceModel.ClientBase'1.get_InnerChannel () в System.ServiceModel.Discovery.DiscoveryClient.FindAsync (критерий FindCriteria, объект userState)
Все необходимые правила добавлены в брандмауэр. Мы также пытались поиграть с правилами, но код либо находит сервис, либо нет. Это никогда не вызывает исключения.
У нас нет физического доступа к клиентскому компьютеру, и основная трудность для нас - воспроизвести эту ошибку.
Буду признателен за любую помощь.
РЕДАКТИРОВАТЬ 2019-10-22
Оказалось, что клиент запускает клиент WCF из общей папки. Не удалось установить сокет из-за настроек безопасности. Неясно, какие настройки играют здесь роль, однако после локального копирования клиента WCF проблема исчезла.