启动RPC服务器时,“端点是重复的”

我的程序使用Microsoft RPC进行进程间通信。 为了准备接收RPC调用,程序运行以下顺序:

  1. RpcServerUseProtseqEp(),然后

  2. 然后,RpcServerRegisterIf()

  3. RpcServerListen()

该程序以上述顺序启动RPC服务器,工作一段时间,然后终止,并可能稍后由另一个程序重新启动。 每次运行程序时,RpcServerUseProtseqEp()的一组参数值是相同的。

当序列在重新启动后第一次运行时总是成功的,但是在后续运行中,RpcServerUseProtseqEp()返回RPC_S_DUPLICATE_ENDPOINT(“端点是重复的”。)目前我只是忽略这个特定的错误代码并将其视为成功,其他原语通常工作正常。

什么是使用RpcServerUseProtseqEp()的正确方法? 我应该做任何清理撤销注册端点或只是保持忽略RPC_S_DUPLICATE_ENDPOINT错误代码?

Solutions Collecting From Web of "启动RPC服务器时,“端点是重复的”"

我有同样的问题,我不能完全解决,但是这个代码适用于我:

UCHAR* pszProtocolSequence = (UCHAR*)"ncacn_ip_tcp"; // Use RPC over TCP/IP UCHAR* pszSecurity = NULL; UCHAR* pszEndpoint = (UCHAR*)"9300"; UINT cMinCalls = 1; UINT cMaxCalls = m_dwConcurrentChannels; UINT fDontWait = FALSE; int RPC_tries, MAX_RPC_Tries; RPC_tries=0; MAX_RPC_Tries=60; do { status = ::RpcserverUseProtseqEp( pszProtocolSequence, cMaxCalls, pszEndpoint, pszSecurity); Sleep(1000); RPC_tries+=1; }while(status!=RPC_S_OK && RPC_tries<MAX_RPC_Tries); 

出于某种原因,您必须等待一段时间,直到您重新启动Windows服务时再次使用RpcserverUseProtseqEp。

我不是RPC方面的专家,但是我想你可能想在服务器终止时使用RpcEpUnregister注销你的端点。 这个函数的文档提到了一个终端数据库,我想这个终端数据库是跨越你的服务器的实例。