2013-12-05 5 views
1

Когда я пытаюсь вызвать функцию RPC, созданную из файла IDL средним инструментом, он блокирует около 20 секунд (в функции NdrGetBuffer), если IP-привязка в RPC_BINDING_HANDLE недоступна.Как сократить время ожидания вызова Windows RPC?

Я попытался вызвать функцию RpcMgmtSetComTimeout с параметром RPC_C_BINDING_MIN_TIMEOUT в своем RPC_BINDING_HANDLE перед вызовом этой функции RPC, но без помощи все равно нужно ждать ~ 20 секунд.

Есть ли способ сократить время ожидания ожидания на этом случае? Большое спасибо!

Elliott

+0

Ну, в общем, требуется много времени, чтобы узнать, что хост действительно недостижим. Интернет довольно большой и имеет всевозможные ссылки с различной задержкой. То, что я делаю, когда сталкиваются с возможно очень длинными задержками в сети, - это отключить сетевой вызов, а также запустить таймер. Либо удаленный одноранговый узел отвечает до срабатывания таймера. Или это не так, и я считаю, что вызов завершился неудачно. –

+0

Спасибо Мартин. Да, когда я сталкиваюсь с вещами сокета, я также буду отключать и использовать async. функции для игры. Однако эта функция вызова RPC была сгенерирована средним инструментом, и инструмент только генерирует синхронизацию. звонки ... um ... существует возможность генерации асинхронизации. вызывает функции RPC? или Могу ли я отменить функции RPC (другим потоком) во время выполнения? Cheers, Elliott – Elliott

ответ

1

Я не пробовал, но this link предполагает, что RpcSetBindingOption с RPC_C_OPT_CALL_TIMEOUT позволит вам установить выноски.

Однако при первом вызове по-прежнему сохраняется 20-секундный тайм-аут (так что сервер может запускаться).

+0

Он работает! Большое спасибо :) Даже первый вызов еще тайм-аут как то, что я установил в функцию, и я использую 64-битный Windows 2003 Server (т. Е. Не только работать с WinXP: D). – Elliott

Смежные вопросы