以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 Dot NET,C#,ASP,VB 』  (http://bbs.xml.org.cn/list.asp?boardid=43)
----  IXMLHTTPRequestPtr->responseText 返回的XML怎么会不完全啊? [求助]  (http://bbs.xml.org.cn/dispbbs.asp?boardid=43&rootid=&id=11993)


--  作者:muzi
--  发布时间:11/12/2004 9:24:00 AM

--  IXMLHTTPRequestPtr->responseText 返回的XML怎么会不完全啊? [求助]
IXMLHTTPRequestPtr->responseText 返回的XML怎么会不完全啊?
我的代码是
bool accessingWebService(_bstr_t command_invoker_service_namespace,  _variant_t user_name,
       _variant_t password, _variant_t mac, _variant_t user_ip, LPSTR sessionID)
{
 IXMLHTTPRequestPtr pIXMLHTTPRequest = NULL;
 BSTR bstrString = NULL;
 HRESULT hr;
 try {
  hr = CoInitialize(NULL);
  SUCCEEDED(hr) ? S_OK : throw hr;

  hr = pIXMLHTTPRequest.CreateInstance("Msxml2.XMLHTTP");
  SUCCEEDED(hr) ? S_OK : throw hr;

  hr = pIXMLHTTPRequest->open(_bstr_t(_T("POST")),
   command_invoker_service_namespace,
   _variant_t(VARIANT_FALSE),
   user_name,
   password);
  SUCCEEDED(hr) ? S_OK : throw hr;
  hr = pIXMLHTTPRequest->setRequestHeader(_bstr_t("SOAPAction"),_bstr_t("whatever"));
  SUCCEEDED(hr) ? S_OK : throw hr; 
  hr = pIXMLHTTPRequest->setRequestHeader(_bstr_t("Pragma"),_bstr_t("no-cache"));
  SUCCEEDED(hr) ? S_OK : throw hr;
  hr = pIXMLHTTPRequest->setRequestHeader(_bstr_t("Cache-Control"),_bstr_t("no-cache"));
  SUCCEEDED(hr) ? S_OK : throw hr;

  _variant_t lpstrBody = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Body><wci:getSessionID xmlns:wci=\"";
  lpstrBody = _bstr_t(lpstrBody) + _bstr_t(command_invoker_service_namespace);
  lpstrBody = _bstr_t(lpstrBody) + _bstr_t("\"><userName>");
  lpstrBody = _bstr_t(lpstrBody) + _bstr_t(user_name);
  lpstrBody = _bstr_t(lpstrBody) + _bstr_t("</userName><mac>");
  lpstrBody = _bstr_t(lpstrBody) + _bstr_t(mac);
  lpstrBody = _bstr_t(lpstrBody) + _bstr_t("</mac><ip>");
  lpstrBody = _bstr_t(lpstrBody) + _bstr_t(user_ip);
  lpstrBody = _bstr_t(lpstrBody) + _bstr_t("</ip></wci:getSessionID></soapenv:Body></soapenv:Envelope>");
  hr = pIXMLHTTPRequest->send(lpstrBody);
  SUCCEEDED(hr) ? S_OK : throw hr;

  if(pIXMLHTTPRequest->status != 200 && pIXMLHTTPRequest->status != 207)
  {
   return false;
  }

  bstrString = pIXMLHTTPRequest->responseText;
  if(bstrString)
  { // 这边返回的response不完整,不知道是为什么. 我要得到的是返回的xml中调用函数的返回值:( 不知道怎么做
   ::SysFreeString(bstrString);
   bstrString = NULL;
  }
  return true;
 }
 catch (...)
 {
  if(bstrString)
  {
   ::SysFreeString(bstrString);
  }
  return false;
 }
}


--  作者:muzi
--  发布时间:11/12/2004 9:52:00 AM

--  
这是返回的结果:
"<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
  <ns1:getSessionIDResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://localhost:8080/wci/CommandInvoker.jws">
   <ns1:getSessionIDReturn xsi:type="xsd:string">7B5A322B725A52F6AE9D181DDA91DD79</ns1:getSessionIDReturn>
  </ns1:getSess"

"7B5A322B725A52F6AE9D181DDA91DD79"这一串就是我调用Web service 返回的结果,也是我要得到的


--  作者:muzi
--  发布时间:11/12/2004 1:22:00 PM

--  
改为这样就可以了:
......
hr = pIXMLHTTPRequest->send(lpstrBody);
  SUCCEEDED(hr) ? S_OK : throw hr;

  if(pIXMLHTTPRequest->status != 200 && pIXMLHTTPRequest->status != 207)
  {
   return false;
  }

  MSXML2::IXMLDOMDocument * pXMLDoc;
  MSXML2::IXMLDOMNode * pXDN;

  IDispatch * ppBody;
  hr = pIXMLHTTPRequest->get_responseXML(&ppBody);
  SUCCEEDED(hr) ? S_OK : throw hr;
  hr = CoInitialize(NULL);
  SUCCEEDED(hr) ? S_OK : throw hr;
  hr = CoCreateInstance(CLSID_DOMDocument, NULL,
   CLSCTX_INPROC_SERVER,
   IID_IXMLDOMDocument,
   (void**)&pXMLDoc);
  SUCCEEDED(hr) ? S_OK : throw hr;
  hr = ppBody->QueryInterface(IID_IXMLDOMNode, (void **)&pXDN);
  SUCCEEDED(hr) ? S_OK : throw hr;
 
  MSXML2::IXMLDOMNode * envelopeNode;
  hr = pXDN->get_lastChild(&envelopeNode);
  SUCCEEDED(hr) ? S_OK : throw hr;
  MSXML2::IXMLDOMNode * bodyNode;
  hr = envelopeNode->get_firstChild(&bodyNode);
  SUCCEEDED(hr) ? S_OK : throw hr;
  MSXML2::IXMLDOMNode * getSessionIDResponseNode;
  hr = bodyNode->get_firstChild(&getSessionIDResponseNode);
  SUCCEEDED(hr) ? S_OK : throw hr;
  MSXML2::IXMLDOMNode * getSessionIDReturnNode;
  hr = getSessionIDResponseNode->get_firstChild(&getSessionIDReturnNode);
  SUCCEEDED(hr) ? S_OK : throw hr;
  MSXML2::IXMLDOMNode * sessionIDTextNode;
  hr = getSessionIDReturnNode->get_firstChild(&sessionIDTextNode);
  SUCCEEDED(hr) ? S_OK : throw hr;
  hr = sessionIDTextNode->get_nodeValue(returnValue);
  SUCCEEDED(hr) ? S_OK : throw hr;
......


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms