【问题标题】:How to shorten the Windows RPC call timeout?如何缩短 Windows RPC 调用超时?
【发布时间】:2013-12-21 23:38:00
【问题描述】:

当我尝试调用由 midl 工具从 IDL 文件生成的 RPC 函数时,如果绑定在其 RPC_BINDING_HANDLE 中的 IP 无法访问,它会阻塞大约 20 秒(在 NdrGetBuffer 函数处)。

在调用 RPC 函数之前,我尝试在其 RPC_BINDING_HANDLE 上调用具有 RPC_C_BINDING_MIN_TIMEOUT 值的 RpcMgmtSetComTimeout 函数,但没有帮助,仍需要等待约 20 秒。

有什么办法可以缩短这种情况下的超时等待时间?非常感谢!

艾略特

【问题讨论】:

  • 嗯,一般来说,发现主机确实不可访问需要很长时间。互联网很大,有各种各样的链接,有不同的延迟。当面临可能很长的网络延迟时,我所做的就是断开网络调用并运行一个计时器。远程对等方在计时器触发之前回复.. 或者它没有回复,我认为呼叫失败。
  • 谢谢马丁。是的,当我面对套接字的事情时,我也会线程化并使用异步。可以玩的功能。但是这个RPC调用函数是midl工具生成的,工具只是生成sync。调用...嗯...是否有可能生成异步。调用 RPC 函数?或者我可以在执行期间取消 RPC 函数(通过另一个线程)吗?干杯,埃利奥特

标签: c++ windows network-programming rpc idl


【解决方案1】:

我还没有尝试过,但this link 建议带有 RPC_C_OPT_CALL_TIMEOUT 的RpcSetBindingOption 应该允许您设置标注。

但是,第一次调用仍有 20 秒超时(因此服务器可以启动)。

【讨论】:

  • 有效!非常感谢 :) 即使第一次调用仍然超时,因为我在函数中设置了,而且我使用的是 64 位 Windows 2003 Server(即不仅适用于 WinXP :D)。
猜你喜欢
  • 1970-01-01
  • 2021-01-09
  • 2012-04-29
  • 2019-07-20
  • 2013-11-26
  • 2012-05-31
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
相关资源
最近更新 更多