【问题标题】:closing an RPC server endpoint关闭 RPC 服务器端点
【发布时间】:2012-10-06 07:45:34
【问题描述】:

我有一个使用特定端口启动 RPC 服务器的程序:

  1. RpcServerRegisterIf
  2. RPCServerUseProtSeqEp
  3. 开始收听...
  4. RpcUnregisterIf

但是,在调用 RPCServerUseProtSeqEp 后,端口立即分配给进程,随后对该函数的调用返回 Duplicate Endpoint。

如何取消注册\关闭此端口?我需要在多个进程中使用这个 rpc 服务器。

【问题讨论】:

标签: c++ c rpc endpoint


【解决方案1】:

你搞错了顺序:

  1. RpcServerUseProtseqEp() // 告诉 RPC 使用哪个协议
  2. RpcServerRegisterIf() //注册接口
  3. RpcServerListen()

msdn, RPCServer Application

我希望这个答案不会太晚

添加 2016 年 8 月 22 日

  1. 要关闭服务器端点,请使用 RpcServerUnregisterIf() 见msdn, Stopping RPCServer Application

  2. 再次:您混淆了 api 调用的顺序:首先调用 RpcServerUseProtseqEp() 来指定协议,然后调用 RpcServerRegisterIf() 来注册服务器,然后调用 RpcServerListen()

  3. RpcServerListen() 正在阻塞调用它的线程。如果您从控制台程序调用它,请使用 ctrl c 结束调用。然后将执行下一行代码,通常是 RpcServerUnregisterIf()。如果您从 nseperate 线程(例如在服务中)调用 RpcServerListen(),请在主线程中使用 RpcMgmtStopServerListen() 关闭服务器。

【讨论】:

  • 这并不能以任何方式回答问题。
  • 这仍然没有回答问题 - 如何关闭 RPC 端点(使用带有端口号的 TCP),以便您可以在同一进程中重新打开它。看起来这实际上是不可能的。
  • 您的回答概述了启动服务器的顺序,并没有添加有关如何关闭它并释放 TCP 接受器的任何细节。
猜你喜欢
  • 1970-01-01
  • 2010-10-18
  • 1970-01-01
  • 2015-12-06
  • 2010-10-19
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多