Как сократить время ожидания вызова Windows RPC?

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

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

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

Эллиотт


person Elliott    schedule 05.12.2013    source источник
comment
Ну и вообще долго выяснять, что хост действительно недоступен. Интернет довольно большой, и в нем есть всевозможные ссылки с разной задержкой. Что я делаю, когда сталкиваюсь с возможно очень длительными сетевыми задержками, так это отключаю сетевой вызов, а также запускаю таймер. Либо удаленный одноранговый узел отвечает до срабатывания таймера... либо нет, и я считаю, что вызов не удался.   -  person Martin James    schedule 05.12.2013
comment
Спасибо, Мартин. Да, когда я сталкиваюсь с сокетами, я также отключу поток и использую асинхронность. функции, с которыми можно поиграть. Однако эта функция вызова RPC была сгенерирована инструментом midl, а этот инструмент просто генерирует файл sync. вызовы... гм... возможно ли сгенерировать async. вызывает функции RPC? или Могу ли я отменить функции RPC (другим потоком) во время выполнения? Привет, Эллиот   -  person Elliott    schedule 06.12.2013


Ответы (1)


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

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

person Eric Brown    schedule 17.12.2013
comment
Оно работает! Большое спасибо :) Даже первый вызов по-прежнему истекает, как я установил в функции, и я использую 64-битный Windows 2003 Server (т.е. не только работаю на WinXP :D). - person Elliott; 07.01.2014