3,245
社区成员
发帖
与我相关
我的任务
分享
//WEB SERVICE数据下载
//sWebService--WEB SERVICE地址 如http://192.168.102.168:8080/cbdt/service/seamap
//sNameSpace--命名空间 如http://seamap.service.jlj.gov
//sFunction--下载函数,如getShipPositionList
//arParam--参数数组,包括参数名和参数值
//Reader--返回数据对象
//sOutMsg--错误提示信息
BOOL CWebServiceDownload::SoapDownload(CString sWebService, CString sNameSpace, CString sFunction,CParamArray &arParam,ISoapReaderPtr Reader,CString &sOutMsg)
{
// Connect to the service.
m_Connector->Property["EndPointURL"] = _bstr_t(sWebService);
m_Connector->Connect();
// 开始消息
m_Connector->Property["SoapAction"] = _bstr_t(sWebService);
m_Connector->BeginMessage();
// Connect the serializer object to the input stream of the connector object.
m_Serializer->Init(_variant_t((IUnknown*)m_Connector->InputStream));
// 创建SOAP消息
m_Serializer->StartEnvelope("","STANDARD","");
m_Serializer->StartBody("");
m_Serializer->StartElement(_bstr_t(sFunction),_bstr_t(sNameSpace),"STANDARD","");
int nSize = arParam.GetSize();
for(int i=0; i<nSize; i++)
{
SOAP_PARAM sp = arParam.GetAt(i);
m_Serializer->StartElement(_bstr_t(sp.sParamName),"","STANDARD","");
m_Serializer->WriteString(_bstr_t(sp.sParamVal));
m_Serializer->EndElement();
}
m_Serializer->EndElement();
m_Serializer->EndBody();
m_Serializer->EndEnvelope();
// 将该消息发送给web服务
try
{
m_Connector->EndMessage();
}
catch(_com_error &e)
{
_bstr_t bstrSource(e.Source());
_bstr_t bstrDescription(e.Description());
sOutMsg.Format("SOAP下载失败:%s",(const char*)bstrDescription);
return FALSE;
}
// 将reader联接到connector的输出字符串
VARIANT_BOOL vb = Reader->Load(_variant_t((IUnknown*)m_Connector->OutputStream), "");
if(vb == -1)
return TRUE;
return FALSE;
}
BOOL bReader = SoapDownload(uc.sWebService,uc.sNamespace,uc.sAISBase,arParam,Reader,sOutMsg);
if(!bReader)
{
sOutMsg = "DownloadAISBaseInfo:SOAP下载失败。";
return FALSE;
}
//下载数据解析////////////////////
CStringList sqlStrList;//形成的插入语句
IXMLDOMNodeListPtr childNodeList = Reader->RpcResult->GetchildNodes();
long len = childNodeList->Getlength();//记录的数量
for(int i=0; i<len; i++)
{
IXMLDOMNodePtr nodePtr = childNodeList->Getitem(i);
IXMLDOMNodeListPtr valNodeList = nodePtr->GetchildNodes();
long num = valNodeList->Getlength();//字段的数量
CString sInfo = (const char*)nodePtr->GetnodeName();
SOAP_AISBASE sa;
for(int j=0; j<num; j++)
{
IXMLDOMNodePtr valPtr = valNodeList->Getitem(j);
CString sNodeName = (const char*)(valPtr->GetnodeName());
sNodeName.MakeUpper();
CString sVal = (const char*)(valPtr->text);
if(sNodeName == "AISCODE")
sa.sBaseCode = sVal;
else if(sNodeName == "AISNAME")
sa.sBaseName = sVal;
else if(sNodeName == "SERVICEREGION")
sa.sSerivceRegion = sVal;
else if(sNodeName == "ADDRESS")
sa.sAddress = sVal;
}
CString sSql;
sSql.Format("INSERT INTO AIS_BASE(AIS_BASE_CODE,AIS_BASE_NAME, SERVICEREGION, ADDRESS) values('%s','%s','%s','%s')",
sa.sBaseCode,sa.sBaseName,sa.sSerivceRegion,sa.sAddress);
sqlStrList.AddTail(sSql);
}
BOOL CWebServiceDownload::DownloadSavReportInfo(COleDateTime tStartTime,COleDateTime tEndTime,CString sShipTypeCode,CString sDangerTypeCode,CString &sOutMsg)
{
ISoapReaderPtr Reader;
Reader.CreateInstance(__uuidof(SoapReader30));
URLCONFIG uc = theApp.m_sysINIFile.GetURLConfig();
//构造参数
CParamArray arParam;
SOAP_PARAM sp;
sp.sParamName = "username";
sp.sParamVal = GetEncryptAccount();
arParam.Add(sp);
sp.sParamName = "password";
sp.sParamVal = GetEncryptPass();
arParam.Add(sp);
sp.sParamName = "starttime";
sp.sParamVal = tStartTime.Format("%Y-%m-%d %H:%M:%S");
arParam.Add(sp);
sp.sParamName = "endtime";
if(tEndTime.m_dt > 0.1)
sp.sParamVal = tEndTime.Format("%Y-%m-%d %H:%M:%S");
else
sp.sParamVal = "";
arParam.Add(sp);
sp.sParamName = "shiptype";
sp.sParamVal = sShipTypeCode;
arParam.Add(sp);
sp.sParamName = "dangercode";
sp.sParamVal = sDangerTypeCode;
arParam.Add(sp);
//进行SOAP下载
BOOL bReader = SoapDownload(uc.sWebService,uc.sNamespace,uc.sSavReport,arParam,Reader,sOutMsg);