您的位置:首页 > 编程语言 > C语言/C++

c++使用toolsoapkit调用webservice

2013-10-24 10:16 218 查看
_bstr_t ProWebservice::queryWebservice(const char* URL, const char* Nmspace, const char* method, vector<string>& v,vector<string>& vParaName)

{
ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
ISoapConnectorPtr Connector;

try
{
// Connect to the service
Connector.CreateInstance(__uuidof(HttpConnector30));
// 接口位置,开放的asmx地址
Connector->Property["EndPointURL"] = URL; 
Connector->Connect();

// 这一句存在的价值是...
Connector->Property["SoapAction"] = _bstr_t(Nmspace) + _bstr_t(method);
Connector->BeginMessage();

Serializer.CreateInstance(__uuidof(SoapSerializer30));

// 将serializer连接到connector的输入字符串
Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));

// 创建SOAP消息
Serializer->StartEnvelope("soap", "", "");
Serializer->StartBody("body");
// 命名空间必须有
Serializer->StartElement(method, Nmspace, "", ""); 

for(int i=0;i<v.size();i++)
{
Serializer->StartElement(vParaName.at(i).c_str(), Nmspace, "", "");
Serializer->WriteString(v.at(i).c_str());
Serializer->EndElement();
}

Serializer->EndElement();

Serializer->EndBody();
Serializer->EndEnvelope();

Connector->EndMessage(); // Send the message to the web service
}
catch(_com_error& e)
{
log.writelog((LPSTR)e.Description());
return "";
}

// 读取响应
Reader.CreateInstance(__uuidof(SoapReader30));
Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");
//return Reader->RpcResult->xml;
MSXML2::IXMLDOMNodePtr node;
node=Reader->RpcResult->GetfirstChild();
_bstr_t Rcode,Rmessage,Rltstring;
Rcode="0";
Rltstring="";
while(node!=nullptr)
{
if(node->GetnodeName()==(_bstr_t)"ReturnCode")
{
Rcode=node->Gettext();
}
if(node->GetnodeName()==(_bstr_t)"ReturnMessage")
{
Rmessage=node->Gettext();
}
if(node->GetnodeName()==(_bstr_t)"DataSetXmlText")
{
Rltstring=node->Gettext();
}
node=node->nextSibling;
}
if(Rcode!=(_bstr_t)"0"&&Rcode!=(_bstr_t)"OK")
{
log.writelog((string)method+((string)"接口调用失败,返回信息")+(string)Rmessage);
}
return Rltstring;
//return Reader->RpcResult->text;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: