Как да съкратя времето за изчакване на Windows RPC повикване?

Когато се опитам да извикам RPC функция, която е генерирана от IDL файл от midl tool, тя блокира около 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
Благодаря Мартин. Да, когато се сблъсквам с нещата със сокета, аз също ще се разделя и ще използвам async. функции, с които да си играете. Тази функция за RPC извикване обаче е генерирана от средния инструмент, а инструментът просто генерира синхронизирането. повиквания... хм... възможно ли е да се генерира 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