RNDIS потеряла соединение / проблема с задержкой
У нас есть временный клиент SOAP, написанный на C#, который подключается к сервису CXF на рабочем столе с устройства Windows Mobile. Когда это устройство подключено через ActiveSync, оно создает виртуальный адаптер для подключения RNDIS. Этот виртуальный адаптер назначает IP-адрес шлюза хосту, 169.254.2.2
,
Когда мы пытаемся установить соединение с именем хоста или IP-адресом хоста, заданным в качестве адреса в клиенте C#, все работает отлично. Однако, когда мы устанавливаем IP-адрес в качестве шлюза RNDIS (169.254.2.2
), соединение периодически теряется на стороне сервера. Служба CXF продолжает пытаться подключиться и в конечном итоге успешно, но это приводит к значительному замедлению соединения. Об ошибках не сообщается в наших журналах на стороне мобильного C#, только на сервере CXF.
Кто-нибудь знает, почему это происходит? Мы должны утверждать, что 169.254.2.2
невозможно использовать в качестве действительной конечной точки, прежде чем мы исключим ее.
О, и в случае, если это помогает, клиент C# получает IP 169.254.2.1
через DHCP после подключения ActiveSync.
2 ответа
Я выяснил причину этого, но мне неприятно отвечать, потому что я сомневаюсь, что кто-то еще мог догадаться, что это проблема:
На нашем CXF-сервере у нас есть звонок InetAddress.getHostName()
который в основном выполняет обратный поиск DNS по запросу, отправленному от клиента C#.
При использовании IP-адреса ActiveSync в DNS не было записи для 169.254.2.1 (конечно), поэтому класс java зависал до истечения времени ожидания метода (что заняло около 20 секунд, прежде чем он написал бы ответ клиенту C#).). При 20 секундах на запрос это привело к значительному замедлению и потерям соединения.
Мы исправили это, переместив вызов в поток исполнителя, который принудительно завершился через полсекунды. Поскольку это было в другой теме, замедление стало несуществующим. Рад, что с этим покончено!
Первая проблема, которая приходит мне в голову, особенно когда я увидел, что вы используете DCHP, заключается в том, что время аренды IP-адреса от DHCP-сервера истекает, и серверу CXF приходится ждать, пока сервер DCHP выдаст новую аренду,
Попробуйте продлить аренду DCHP, если вы знаете, что IP не изменится, и используйте статический IP, если можете. Это по крайней мере удалит эту точку отказа.