vc6.0调用webservice真是头疼

glgxw 2010-12-29 12:04:52
http://125.40.47.218:8888/zgyb_lc/services/YBService?wsdl
URL地址是这个
调用的时候接收不到返回的消息 不知道啥原因?
ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
ISoapConnectorPtr Connector;

// Connect to the service
Connector.CreateInstance(__uuidof(HttpConnector30));


Connector->Property["EndPointURL"] = "http://125.40.47.218:8888/zgyb_lc/services/YBService?wsdl";
Connector->Connect();
MessageBox("1");

// Begin message
Connector->Property["SoapAction"] = "http://schemas.xmlsoap.org/wsdl/soap";
Connector->BeginMessage();
MessageBox("2");


// Create the SoapSerializer
Serializer.CreateInstance(__uuidof(SoapSerializer30));

// Connect the serializer to the input stream of the connector
Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));

// Build the SOAP Message
Serializer->StartEnvelope("","","");
Serializer->StartBody("");
Serializer->StartElement("login","http://schemas.xmlsoap.org/wsdl/","NONE","");
Serializer->StartElement("ddyljg","hhttp://schemas.xmlsoap.org/wsdl/","NONE","");///http://webservice.yb.erixin.com/
Serializer->WriteString((char*)_bstr_t(ddyljg));
MessageBox("3");
Serializer->EndElement();
Serializer->StartElement("mcCString","http://schemas.xmlsoap.org/wsdl/","NONE","");//http://webservice.yb.erixin.com/
Serializer->WriteString((char*)_bstr_t(mcCString));
MessageBox("4");
Serializer->EndElement();
Serializer->EndElement();
Serializer->EndBody();
MessageBox("5");
Serializer->EndEnvelope();
MessageBox("6");
// Send the message to the web service
Connector->EndMessage();
MessageBox("7");
// Let us read the response
Reader.CreateInstance(__uuidof(SoapReader30));
MessageBox("8");
// Connect the reader to the output stream of the connector
Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");
MessageBox("9");
// Display the result
//
/*char *ReardWX = new char[ strlen( Reader->RpcResult->text ) + 1 ];
strcpy( ReardWX, Reader->RpcResult->text );
return ReardWX;*/
printf("Answer: %s\n", (const char*)Reader->RpcResult->text);
MessageBox("10");
// MessageBox((const char*)Reader->RpcResult->text);
// return (char*)_bstr_t(sRmsg);
MessageBox((const char*)Reader->Body->xml);
MessageBox((const char*)Reader->RpcResult->text);
return (const char*)Reader->RpcResult->text;
...全文
412 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐鹦鹉 2010-12-29
  • 打赏
  • 举报
回复
以下是俺用的代码:
//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;
}
快乐鹦鹉 2010-12-29
  • 打赏
  • 举报
回复
Connector->Property["EndPointURL"] = "http://125.40.47.218:8888/zgyb_lc/services/YBService";
快乐鹦鹉 2010-12-29
  • 打赏
  • 举报
回复
用wsdl结尾的怎么回事你需要访问的URL地址呢?wsdl只是查看数据结构的啊。
我已经在VC6下实现了Web Services的数据下载,没有问题啊。返回的是XML数据流,按照XML协议和wsdl中定义的参数和返回值格式进行解析就可以了。
glgxw 2010-12-29
  • 打赏
  • 举报
回复
谢谢了 主要是俺对这不是很懂 学习阶段 请谅解!
快乐鹦鹉 2010-12-29
  • 打赏
  • 举报
回复
你的废话真多......
glgxw 2010-12-29
  • 打赏
  • 举报
回复
也就是说对自己有用的定义下就可以了?没有用的可以不定义?
快乐鹦鹉 2010-12-29
  • 打赏
  • 举报
回复
大致一样。这个就不用强求了。也许比它少几项,也许数据类型不一样。
glgxw 2010-12-29
  • 打赏
  • 举报
回复
SOAP_AISBASE 是定义的跟返回结构体结构一样的结构体吗?
快乐鹦鹉 2010-12-29
  • 打赏
  • 举报
回复
	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);
}
glgxw 2010-12-29
  • 打赏
  • 举报
回复
如果webservice返回有结构体该怎么取呢?
快乐鹦鹉 2010-12-29
  • 打赏
  • 举报
回复
其中一个调用是这样的:
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);
bragi523 2010-12-29
  • 打赏
  • 举报
回复
文本service有在客户端调用应该和其他DLL没有两样
glgxw 2010-12-29
  • 打赏
  • 举报
回复
刚开始接触webservice调用 真是摸不着头绪
glgxw 2010-12-29
  • 打赏
  • 举报
回复
楼上的还在吗?能不能把你调用函数的这段让俺也看下?谢谢了!
内容概要:本文档聚焦于基于Peng-Robinson状态方程的化工热力学计算研究,系统介绍了利用Matlab代码实现纯组分及多组分系统的压缩因子(z因子)和逸度系数的计算方法,并进一步拓展至泡点压力与露点压力的数值求解。资源涵盖了从状态方程推导、非线性方程求根、相平衡条件判断到迭代算法实现的完整技术路线,提供了可运行的Matlab程序代码,有助于深入理解实际工程中物性参数的计算原理与实现过程; 适合人群:具备化工热力学基础知识和一定Matlab编程能力的高校学生、科研人员及工程技术人员,尤其适合从事过程系统模拟、油气田开发、精馏设计及相关领域研究的专业人士; 使用场景及目标:① 掌握Peng-Robinson方程在真实气体物性计算中的应用;② 实现多组分混合体系的相平衡计算与泡/露点预测;③ 为Aspen Plus等商用流程模拟软件提供底层算法验证与教学参考;④ 支持科研论文复现、课程设计、毕业设计及工业过程优化中的热力学数据支撑需求; 阅读建议:建议读者结合经典化工热力学教材同步学习,重点理解立方型状态方程的根判别、迭代收敛策略与相平衡准则的数学表达,动手调试并运行所提供的Matlab代码以掌握算法细节,还可将其扩展应用于其他状态方程(如SRK、vdW)的对比分析研究。
内容概要:本文围绕列车-轨道-桥梁交互仿真研究,基于Matlab平台构建数值模型,系统分析列车运行过程中轨道与桥梁结构间的动态相互作用机制。研究涵盖多体动力学建模、耦合系统运动方程求解、边界条件设定及仿真结果可视化等关键环节,重点揭示高速行车条件下基础设施的振动传递规律与力学响应特征。该仿真方法可有效评估结构安全性、舒适性指标及疲劳寿命,为轨道交通工程的设计优化与运维管理提供理论支撑和技术路径。文中配套提供了完整的Matlab代码实现方案及操作说明,便于用户复现、验证和拓展相关研究。; 适合人群:具备Matlab编程基础和结构动力学、车辆动力学等相关专业知识的研究生、科研人员及从事铁路工程、桥梁工程与交通系统安全评估的工程技术人才,尤其适合开展轨道交通耦合振动课题的研究者。; 使用场景及目标:①用于高校与科研机构进行列车-轨道-桥梁耦合系统动力学特性的教学演示与科学研究;②支撑高速铁路桥梁的设计优化、运营安全性评估与减振降噪方案验证;③为复杂交通基础设施的多物理场耦合仿真提供建模思路与代码参考。; 阅读建议:建议读者结合所提供的Matlab代码逐模块深入研读,重点关注系统建模假设、质量-刚度-阻尼矩阵构建方法及数值积分算法的实现细节,同时可通过调整参数进行敏感性分析,进一步掌握仿真模型的适用范围与优化方向。

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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