vc 中调用 WebService 中的方法.doc_第1页
vc 中调用 WebService 中的方法.doc_第2页
vc 中调用 WebService 中的方法.doc_第3页
vc 中调用 WebService 中的方法.doc_第4页
vc 中调用 WebService 中的方法.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CString m_strHttp = _T(/TranslateService.asmx);CString m_strObject = _T(/TranslateService.asmx);/本文以调用 /TranslateService.asmx中的 /Translate 方法为例说明如何调用 WebService 中的方法/UTF8编码、解码 .由于 webservice 中返回的默认的数据类型是 utf8 编码格式的,/所以本人将其转换成 Unicode 编码格式,以便于程序查看./编码/Convert(str,936,CP_UTF8);/解码/Convert(str,CP_UTF8,936);/编码、解码函数CString CWebService:Convert(CString strInput, int nSourceCodepage, int nTargetCodepage)int len = strInput.GetLength(); wchar_t* pUnicode = NULL; int unicodeLen = MultiByteToWideChar(nSourceCodepage,0,(const char *)strInput.GetBuffer(0),-1,NULL,0); pUnicode=new wchar_tunicodeLen+1; memset(pUnicode,0,(unicodeLen+1)*sizeof(wchar_t); MultiByteToWideChar(nSourceCodepage,0,(const char *)strInput.GetBuffer(0),-1,(LPWSTR)pUnicode,unicodeLen); BYTE* pTargetData = NULL; int targetLen=WideCharToMultiByte(nTargetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,0,NULL,NULL); pTargetData=new BYTEtargetLen+1; memset(pTargetData,0,targetLen+1); WideCharToMultiByte(nTargetCodepage,0,(LPWSTR)pUnicode,-1,(char *)pTargetData,targetLen,NULL,NULL); CString strTarget; strTarget.Format(%s,pTargetData); delete pUnicode; delete pTargetData; return strTarget; DWORD dwHttpRequestFlags =INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_AUTO_REDIRECT;const TCHAR szHeaders =_T(Accept: text/*rnUser-Agent: MFC_WebSevice_Samplern);/GetWebServiceObject:获取 webservice 方法的返回的数据/strURL 包函了 WebService 的调用地址和方法,以及传递给方法的参数/strObjectType 为 WebService 返回的数据类型,本文是 string (字符串)类型CString CWebService:GetWebServiceObject(CString strURL, CString strObjectType)CString strList;CString strXMLObject;LPCTSTR pszURL = strURL;BOOL bStripMode = FALSE;CHttpFile *pFile = NULL;CInternetSession netSession;CHttpConnection* pServer = NULL;tryCString strServerName;CString strObject;INTERNET_PORT nPort;DWORD dwServiceType;if (!AfxParseURL(pszURL, dwServiceType, strServerName, strObject, nPort) |dwServiceType != INTERNET_SERVICE_HTTP)THROW(1);pServer = netSession.GetHttpConnection(strServerName, nPort);pFile = pServer-OpenRequest(CHttpConnection:HTTP_VERB_GET,strObject, NULL, 1, NULL, NULL, dwHttpRequestFlags);pFile-AddRequestHeaders(szHeaders);pFile-SendRequest();DWORD dwRet;pFile-QueryInfoStatusCode(dwRet);if (dwRet = HTTP_STATUS_DENIED)/需要用户名密码DWORD dwPrompt;dwPrompt = pFile-ErrorDlg(NULL, ERROR_INTERNET_INCORRECT_PASSWORD,FLAGS_ERROR_UI_FLAGS_GENERATE_DATA | FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS, NULL);if (dwPrompt != ERROR_INTERNET_FORCE_RETRY)THROW (1);pFile-SendRequest();pFile-QueryInfoStatusCode(dwRet);if (dwRet = HTTP_STATUS_MOVED |dwRet = HTTP_STATUS_REDIRECT |dwRet = HTTP_STATUS_REDIRECT_METHOD)/需要重定向CString strNewLocation;pFile-QueryInfo(HTTP_QUERY_RAW_HEADERS_CRLF, strNewLocation);int nPlace = strNewLocation.Find(_T(Location: );if (nPlace = -1)THROW (2);strNewLocation = strNewLocation.Mid(nPlace + 10);nPlace = strNewLocation.Find(n);if (nPlace 0)strNewLocation = strNewLocation.Left(nPlace);pFile-Close();delete pFile;pServer-Close();delete pServer;/ figure out what the old place wasif (!AfxParseURL(strNewLocation, dwServiceType, strServerName, strObject, nPort)THROW (2);if (dwServiceType != INTERNET_SERVICE_HTTP)THROW (2);/ try again at the new locationpServer = netSession.GetHttpConnection(strServerName, nPort);pFile = pServer-OpenRequest(CHttpConnection:HTTP_VERB_GET,strObject, NULL, 1, NULL, NULL, dwHttpRequestFlags);pFile-AddRequestHeaders(szHeaders);pFile-SendRequest();pFile-QueryInfoStatusCode(dwRet);if (dwRet != HTTP_STATUS_OK)THROW(2);return _T();CString strRead;int nRow = 0;strList.Empty();int nSize = pFile-GetLength();while(pFile-ReadString(strRead)int nNum = strRead.GetLength();strRead = Convert(strRead,CP_UTF8,936);strList += strRead;catch(CInternetException* pEx)TCHAR szErr1024;pEx-GetErrorMessage(szErr, 1024);int nRetCode = 2;pEx-Delete();CString strMsg;strMsg.Format(%s,szErr);CEBookDlg* pEBookWnd = (CEBookDlg*)AfxGetMainWnd();return strMsg;if (pFile != NULL)delete pFile;pFile = NULL;if (pServer != NULL)delete pServer;pServer = NULL;netSession.Close();/将XML对象解析出来int nObj = strList.Find(strObjectType);int nLeft = strList.Find(,nObj);int nRight = strList.Find(,nLeft);strXMLObject = strList.Mid(nLeft + 1,nRight - nLeft - 1);/return strXMLObject;/调用 WebService 中的方法void Translate

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论