在IIS6.0扩展中接收客户端POST过来的数据遇到问题

哈利路亚1874 2010-10-24 04:56:17
我写了一个IIS6.0的扩展,在HttpExtensionProc回调函数中循环接收数据,为什么只能接收到客户端第一次POST过来的数据,后面POST的数据就接收不到了,怎么样才能接收到所有的数据呢?从客户端到服务器始终保持连接。我的代码如下:

DWORD CIISExtendExtension::HttpExtensionProc(EXTENSION_CONTROL_BLOCK *pecb)
{
DebgPrint("Begin HttpExtensionProc!\n");
bExit = FALSE;

DWORD dwLen = 0;
BOOL retn = FALSE;
DWORD dwPostSize = 0;
DWORD dwThreadId = 0;
Thread_Param *param;
char *postDataBuffer = NULL;
HSE_EXEC_URL_INFO ExecUrlInfo = {0};
HSE_EXEC_URL_ENTITY_INFO *pEntity = NULL;

//获取URL
pecb->GetServerVariable(pecb->ConnID,"URL",0,&dwLen);

Url = new char[dwLen+1];
if (Url == NULL)
{
DebgPrint("Alloc Url buffer error!\n");
return HSE_STATUS_ERROR;
}
pecb->GetServerVariable(pecb->ConnID,"URL",Url,&dwLen);
DebgPrint(Url);

//首次Client连接过来,记录Client的IP和PORT
//通过特定URL数据进行比对确认Client
if (!stricmp(Url,"/index.html") && !stricmp(pecb->lpszMethod,"POST"))
{
//**************************************************************************************//
//这个指针没释放
param = new Thread_Param;
param->sClient = this->sClient;
param->pecb = pecb;
//创建线程,线程句柄没关闭
hTread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)FowardDataToClient,param,0,&dwThreadId);
if (hTread == NULL)
{
DebgPrint("Create thread error!\n");
return FALSE;
}
DebgPrint("Create thread success!\n");
//**************************************************************************************//
while (TRUE)
{
//获取传送的POST数据
if (pecb->cbTotalBytes > 0)
{
postDataBuffer = (char *)LocalAlloc(LPTR,pecb->cbTotalBytes);
if(postDataBuffer == NULL)
{
DebgPrint("LocalAlloc error!\n");
return HSE_STATUS_ERROR;
}
memcpy(postDataBuffer,pecb->lpbData,pecb->cbAvailable);
if (pecb->cbTotalBytes-pecb->cbAvailable > 0)
{
//读取剩余的数据
pecb->ReadClient(pecb->ConnID,(LPVOID)(postDataBuffer+pecb->cbAvailable),&dwPostSize);
DebgPrint(postDataBuffer);
}
}
Sleep(100);
DebgPrint(postDataBuffer);
//将接收的数据转发给3389服务端
if(send(sClient,postDataBuffer,pecb->cbTotalBytes,0) == SOCKET_ERROR)
{
int erroCode = WSAGetLastError();
DebgPrint("Send post data error!\n");
LocalFree(postDataBuffer);
return HSE_STATUS_ERROR;
}
ZeroMemory(postDataBuffer,pecb->cbTotalBytes);
}

LocalFree(postDataBuffer);
delete Url;
return HSE_STATUS_SUCCESS_AND_KEEP_CONN;
}

//如果不是客户端的数据,就正常返回请求的网页
else
{
ExecUrlInfo.dwExecUrlFlags = HSE_EXEC_URL_IGNORE_CURRENT_INTERCEPTOR;
retn = pecb->ServerSupportFunction(pecb->ConnID, HSE_REQ_IO_COMPLETION,HseIoCompletionProc, NULL, (LPDWORD)pEntity);
if (!retn)
{
DebgPrint("HSE_REQ_IO_COMPLETION support error!\n");
delete Url;
return HSE_STATUS_ERROR;
}
retn = pecb->ServerSupportFunction(pecb->ConnID, HSE_REQ_EXEC_URL, &ExecUrlInfo, NULL, NULL);
if (!retn)
{
DebgPrint("HSE_REQ_EXEC_URL support error!\n");
delete Url;
return HSE_STATUS_ERROR;
}

delete Url;
return HSE_STATUS_PENDING;
}

//处理结束 并保持连接
return HSE_STATUS_SUCCESS_AND_KEEP_CONN;
}

因为IIS开发不是太明白,求指点!
...全文
128 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈利路亚1874 2010-10-24
  • 打赏
  • 举报
回复
这儿也另开了一贴,分不是问题。http://topic.csdn.net/u/20101024/17/92a40f80-460f-4656-87b0-2657dc46a813.html
哈利路亚1874 2010-10-24
  • 打赏
  • 举报
回复
希望IIS的高手们指点一下,我就是想在这个扩展中接收从特定客户端POST过来的数据。现在就是只能接收第一次,如何循环接收?

8,327

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 IIS
社区管理员
  • IIS
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧