C++ &引用;“已经在听了”;调用RPC调用时

C++ &引用;“已经在听了”;调用RPC调用时,c++,visual-studio,visual-c++,interop,rpc,C++,Visual Studio,Visual C++,Interop,Rpc,我使用Microsoft RPC进行进程间通信。我有一个与一组方法的接口,这些方法接受字节管道作为“in”参数(IDL描述): 每隔一段时间,当我通过MIDL生成并委托给NdrClientCall2()的客户机存根在客户机端调用此类方法时,它不会到达服务器端,但NdrClientCall2()返回RPC_S_ready_LISTENING(“服务器已在侦听”),这确实令人困惑 我添加了在传输过程中用于推/拉操作的函数中的日志记录功能——对于任何以这种方式失败的调用,都不会调用这些函数。这意味着变

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

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

我添加了在传输过程中用于推/拉操作的函数中的日志记录功能——对于任何以这种方式失败的调用,都不会调用这些函数。这意味着变速箱甚至没有启动

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


可能的原因和解决方法是什么?

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

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


或者RPC库的实现中存在与时间相关的错误,您必须通过重试调用来解决它(在任何情况下,这都可能是一种有效的解决方法)。一次只能阻止对该API的一个调用

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


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

我认为这不应该被视为问题。见

也可以查看这个:

[更新] 可能内存释放有问题。查看实现示例并检查代码。





祝你好运。

我认为这不应该被视为一个问题。见

也可以查看这个:

[更新] 可能内存释放有问题。查看实现示例并检查代码。





祝你好运。

这意味着我们有一个严重的问题。。。在使用CoCreateInstance()的示例中,整个过程都是有效的,只是错误指示不正确。在我们的例子中,RPC调用甚至没有开始-没有执行管道操作。放置一些IDL以更好地理解。添加了接口定义。没什么特别的。这意味着我们有一个严重的问题。。。在使用CoCreateInstance()的示例中,整个过程都是有效的,只是错误指示不正确。在我们的例子中,RPC调用甚至没有开始-没有执行管道操作。放置一些IDL以更好地理解。添加了接口定义。没什么特别的。在仔细考虑了所有事实之后,我们向Microsoft支持部门提出了一个事件,并且。。。这实际上是MS RPC运行时中的一个bug,可以很容易地解决:在仔细考虑了所有事实之后,我们向Microsoft支持人员提出了一个事件,并且。。。这实际上是MS RPC运行时中的一个bug,可以很容易地解决:
[
    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
}