5

特定のポートで RPC サーバーを起動するプログラムがあります。

  1. RpcServerRegisterIf
  2. RPCServerUseProtSeqEp
  3. 聞き始める...
  4. RpcUnregisterIf

ただし、RPCServerUseProtSeqEp を呼び出した直後にポートがプロセスに割り当てられ、この関数への後続の呼び出しは Duplicate Endpoint を返します。

このポートを登録解除または閉じるにはどうすればよいですか? この rpc サーバーを複数のプロセスで使用する必要があります。

4

1 に答える 1

-1

順序を間違えました:

  1. RpcServerUseProtseqEp() // 使用するプロトコルを RPC に伝える
  2. RpcServerRegisterIf() // インターフェースを登録する
  3. RpcServerListen()

msdn、RPCServer アプリケーションを参照してください

この答えが遅すぎないことを願っています

2016/8/22追記

  1. サーバー エンドポイントを閉じるには、RpcServerUnregisterIf() を使用します。msdnの「 RPCServer アプリケーションの停止」を参照してください。

  2. 再度: API 呼び出しの順序を間違えました: 最初に RpcServerUseProtseqEp() を呼び出してプロトコルを指定し、次に RpcServerRegisterIf() を呼び出してサーバーを登録し、次に RpcServerListen() を呼び出します。

  3. RpcServerListen() は、呼び出し元のスレッドをブロックしています。コンソール プログラムから呼び出す場合は、ctrl c を使用して呼び出しを終了します。次に、コードの次の行が実行されます。これは通常、RpcServerUnregisterIf() です。サービスなどの別のスレッドから RpcServerListen() を呼び出した場合は、メイン スレッドで RpcMgmtStopServerListening() を使用してサーバーをシャットダウンします。

于 2014-11-17T21:22:38.227 に答える