描述:
IDL文件如下:
[
uuid(9f6a44ae-51a0-4971-807f-1315ec4dd880),
version(1.0)
]
interface IAlgorithm
{
void Hello();
}
ACF文件如下:
[
implicit_handle (handle_t IAlgorithm_IfHandle)
]
interface IAlgorithm
{
}
服务端代码如下:
void main()
{
RPC_STATUS status;
unsigned char * pszProtocolSequence = (unsigned char *)"ncacn_ip_tcp";
unsigned char * pszSecurity = NULL;
unsigned char * pszEndpoint =(unsigned char*)"1044";
unsigned int cMinCalls = 1;
unsigned int cMaxCalls = 20;
unsigned int fDontWait = FALSE;
status = RpcServerUseProtseqEp(pszProtocolSequence,
cMaxCalls,
pszEndpoint,
pszSecurity);
if (status)
{
exit(status);
}
status = RpcServerRegisterIf(IAlgorithm_v1_0_s_ifspec,
NULL,
NULL);
if (status)
{
exit(status);
}
cout<<"listen...."<<endl;
status = RpcServerListen(cMinCalls,
cMaxCalls,
fDontWait);
if (status)
{
exit(status);
}
}
客户端代码如下:
RPC_STATUS status;
unsigned char * pszUuid = NULL;
unsigned char * pszProtocolSequence = (unsigned char*)"ncacn_ip_tcp";
unsigned char * pszNetworkAddress = (unsigned char*)"127.0.0.1";
unsigned char * pszEndpoint =(unsigned char *) "1044";
unsigned char * pszOptions = NULL;
unsigned char * pszStringBinding = NULL;
unsigned long ulCode;
status = RpcStringBindingCompose(pszUuid,
pszProtocolSequence,
pszNetworkAddress,
pszEndpoint,
pszOptions,
&pszStringBinding);
if (status)
{
exit(status);
}
status = RpcBindingFromStringBinding(pszStringBinding,
&IAlgorithm_IfHandle);
if (status)
{
exit(status);
}
RpcTryExcept
{
Hello();
}
RpcExcept(1)
{
ulCode = RpcExceptionCode();
printf("xxxxx Runtime reported exception 0x%lx = %ld\n", ulCode, ulCode);
}
RpcEndExcept
status = RpcStringFree(&pszStringBinding);
if (status)
{
exit(status);
}
status = RpcBindingFree(&IAlgorithm_v1_0_c_ifspec);
if (status)
{
exit(status);
}
exit(0);
这是我做一个用ncacn_ip_tcp来通信的RPC模型,服务端实现了Hello方法.我这个问题的现象是用如果用管道来代替ncan_ip_tcp则可以正常通信,但是用ncacn_ip_tcp来通信老是报出访问被拒绝的错误,请大家指出我的错误,或者给一个小示例也可以.
解决方案1:
mark