代码之家  ›  专栏  ›  技术社区  ›  sharptooth

调用RPC调用时“已在侦听”

  •  1
  • sharptooth  · 技术社区  · 16 年前

    我使用Microsoft RPC进行进程间通信。我有一个接口,其中有一组方法接受字节管道作为“in”参数(idl描述):

    [
        uuid(ActualGuidHere), 
        version(1.0), 
        pointer_default(unique)
    ]
    
    interface IMyInterface
    {
        //other irrelevant methods here
        error_status_t rpcDoAction( [in] pipe byte params );
        //more irrelevant methods here
    }
    

    每隔一段时间,当我通过由MIDL生成并委托给ndrclientcall2()的客户机存根在客户机端调用此类方法时,它不会到达服务器端,但ndrclientcall2()会返回rpc_already_listening(“服务器已经在侦听”),这非常令人困惑。

    我在传输过程中添加了用于推/拉操作的函数的日志记录——对于任何失败的调用,都不会调用它们。这意味着传输甚至没有启动。

    在调用没有管道作为参数的方法时,我从未遇到过这种行为。

    原因和解决方法是什么?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Daniel Earwicker    16 年前

    文档似乎非常少-我不认为有一个巨大的用户社区 直接的 使用rpc apis-但是我猜为了设置管道参数,rpc必须在内部调用 RpcServerListen . 对该API的调用一次只能阻塞一个。

    您只是偶尔看到这个问题,这表明它与时间有关,所以您是否可能在不同的线程上进行两次这样的调用,有时它们是同时进行的?

    或者,在RPC库的实现中有一个与时间相关的bug,您必须通过重试调用来解决它(在任何情况下,这可能是一个有效的解决方法)。

        2
  •  0
  •   lsalamon    16 年前
    推荐文章