“已在侦听”调用RPC调用时(“Already listening” when invoking a

2019-09-30 03:48发布

我使用微软RPC的进程间通信。 我有一组接受字节管为“在”参数(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_S_ALREADY_LISTENING(“服务器已在侦听“),这实在是令人困惑的。

我添加登录到传输过程中用于推/拉操作的函数 - 它们都还没有被调用任何失败这样的呼叫。 这意味着传输甚至还没有开始。

调用没有管作为参数的方法时,我从来没有遇到这样的行为。

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

Answer 1:

该文件似乎相当小-我不认为这是直接使用的RPC API的一个庞大的用户社区-但我的猜测是,为了建立管参数,它是必要的RPC到内部调用RpcServerListen 。 只有一个调用该API可以在同一时间阻止。

您看到的问题只是偶尔的事实表明,这是与时间相关的,那么,这可能是你正在对不同的线程两个这样的电话,有时他们会同时进行?

如果不是这样,没有在RPC库的实现定时相关的错误,你将不得不解决它通过重试调用(可能是在任何情况下的有效解决方案)。



Answer 2:

我想这应该不是一个问题来处理。 见PRB:CoCreateInstance的在RPC服务器失败

查看这一个了: 如何注册多个RPC服务器接口

[更新]也许有在释放内存问题。 见实施的例子PIPE和检查你的代码。
在客户端上实现输入管道
在客户端实现输出管道
在服务器上实现输入管道
在服务器上实现输出管道

祝好运。



文章来源: “Already listening” when invoking an RPC call