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