C++ &引用;端点是重复的;启动RPC服务器时

C++ &引用;端点是重复的;启动RPC服务器时,c++,windows,rpc,C++,Windows,Rpc,我的程序使用Microsoft RPC进行进程间通信。要准备接收RPC调用,程序将按以下顺序运行: RpcServerUseProtseqEp(),然后 RpcServerRegisterIf(),然后 RpcServerListen() 程序按照上述顺序启动其RPC服务器,工作一段时间,然后终止,稍后可能由另一个程序重新启动。每次运行程序时,RpcServerUseProtseqEp()的参数值集都是相同的 当序列在重新启动后第一次运行时,它总是成功的,但是在随后的运行中,rpcserverU

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

  • RpcServerUseProtseqEp(),然后

  • RpcServerRegisterIf(),然后

  • RpcServerListen()

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

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


    使用RpcServerUseProtseqEp()的正确方法是什么?我应该进行任何清理以撤销已注册的终结点,还是继续忽略RPC_S_DUPLICATE_终结点错误代码?

    我不是RPC方面的专家,但我认为您可能希望在服务器终止时使用rpceunregister注销您的终结点。此函数的文档中提到了一个端点数据库,我想它在您的服务器的各个安装中都存在。

    我也遇到了同样的问题,我无法完全修复,但这段代码对我很有用:

    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);
    
    UCHAR*pszProtocolSequence=(UCHAR*)“ncacn\u ip\u tcp”//通过TCP/IP使用RPC
    UCHAR*pszSecurity=NULL;
    UCHAR*pszEndpoint=(UCHAR*)“9300”;
    UINT cmincall=1;
    UINT cMaxCalls=m_DWConcurrentChannel;
    UINT fDontWait=FALSE;
    int RPC_尝试,MAX RPC_尝试;
    RPC_=0;
    最大试验次数=60次;
    做
    {
    状态=::rpcserveruseprotsekep(
    psz协议序列、cMaxCalls、pszEndpoint、psz安全性);
    睡眠(1000);
    RPC_+=1;
    
    }(status!=RPC_S_OK&&RPC_triesTried调用RpcServerInqBindings(),然后调用rpceunregister()。前者成功,后者返回“服务器端点未能执行操作”。