我的程序使用 Microsoft RPC 进行进程间通信。为了准备接收 RPC 调用,程序运行以下序列:
RpcServerUseProtseqEp(),然后
RpcServerRegisterIf(),则
RpcServerListen()
该程序按照上述顺序启动其 RPC 服务器,工作一段时间,然后终止,稍后可能由另一个程序重新启动。每次运行程序时,RpcServerUseProtseqEp() 的参数值集都是相同的。
当序列在重新启动后第一次运行时,它总是成功,但在后续运行中,RpcServerUseProtseqEp() 返回 RPC_S_DUPLICATE_ENDPOINT (“端点是重复的。”)目前,我只是忽略这个特定的错误代码并将其视为成功,然后所有其他原语通常工作得很好。
使用 RpcServerUseProtseqEp() 的正确方法是什么?我应该进行任何清理以撤销已注册的端点,还是继续忽略 RPC_S_DUPLICATE_ENDPOINT 错误代码?
我遇到了同样的问题,我无法完全解决,但这段代码对我有用:
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。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)