Обновление щедрости СНОВА, потому что мне действительно нужно знать, как заставить это работать, или окончательный ответ о том, почему это не будет.
Я добавил альтернативное объяснение проблемы здесь.
Получив чертовски время, получив двухсторонний (IsOneWay = false) клиентский сервер WCF для работы в .Net 3/3.5.
После того, как клиент успешно зарегистрируется в сервисе, служба периодически объявляет() обращается к зарегистрированным клиентам. Теперь клиент или сервер зависают, пока не истечет время отклика сервера SendTimeout, настроенного на 2 секунды. Затем сторона сервера имеет исключение тайм-аута следующим образом. Только тогда код клиента клиента сразу же ПОЛУЧИТ МЕТОД КОДА и попытается вернуть значение. К тому времени клиентский сокет прерывается, а файл WCF терпит неудачу.
Мне кажется, что что-то на клиенте висит локальная очередь WCF от обработки до тех пор, пока сокет не истечет, но не достаточно рано, чтобы отменить вызов локального метода. Но если предположить, что это исключение ниже, сервер пытается отправить операцию на http://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymous (неуместно!) И отключается, Возможно, этот URI - это просто "Имя" удаленного клиента, так как WCF знает, чтобы ссылаться на него в целях сообщения об ошибке, и это просто означает, что он не загружает URI. Я не могу сказать, сбой сервера сначала или клиент сначала сбой.
Я пробовал добавлять трассировку WCF, но я не получаю гораздо больше информации.
Примерный пример кода здесь, но он, должно быть, слишком много для переваривания. Я экспериментировал с вариациями этого кода.
TimeoutException 'This request operation sent to http://schemas.microsoft.com/2005/12/ServiceModel/Addressing/Anonymous did not receive a reply within the configured timeout (00:00:00). The time allotted to this operation may have been a portion of a longer timeout. This may be because the service is still processing the operation or because the service was unable to send a reply message. Please consider increasing the operation timeout (by casting the channel/proxy to IContextChannel and setting the OperationTimeout property) and ensure that the service is able to connect to the client.'
Server stack trace:
at System.ServiceModel.Dispatcher.DuplexChannelBinder.SyncDuplexRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Dispatcher.DuplexChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)