描述:
#import "msxml4.dll"
using namespace MSXML2;
#import "d:\Program Files\Common Files\MSSoap\Binaries\mssoap30.dll" \
exclude("IStream", "ISequentialStream", "_LARGE_INTEGER", \
"_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")
using namespace MSSOAPLib30;
CString BeginSoap(CString leadnum, CString tagnum, CString time, CString la, CString lot, CString dose, CString type, CString WebUrl)
{
ISoapConnectorPtr SoapConnector;
ISoapSerializerPtr Serializer;
ISoapReaderPtr Reader;
CString wenurl;
HRESULT hr;
try
{
//创建SoapConnector类的对象
SoapConnector.CreateInstance(__uuidof(HttpConnector30));
//指定Web服务的地址
//SoapConnector->Property ["EndPointURL"] =(LPSTR)(LPCTSTR)WebUrl;
SoapConnector->Property ["EndPointURL"] ="http://mrms.kvsoft.cn:88/ydfsy/sws/fsy/ydfsyremote.wsdl";
//与Web服务连接
hr=SoapConnector->Connect();
if(FAILED(hr)) return "";
//指定Web服务完成的操作
wenurl.Format("%s/LeadChestRequest", WebUrl);
SoapConnector->Property ["SoapAction"] = "http://mrms.kvsoft.cn:88/ydfsy/sws/fsy/LeadChestRequest";
//SoapConnector->Property ["SoapAction"] = "";
//准备发送消息给web服务
SoapConnector->BeginMessage();
// 创建SoapSerializer对象
Serializer.CreateInstance(__uuidof(SoapSerializer30));
// ??serializerá??óμ?connectorμ?ê?è?×?·?′?
Serializer->Init(_variant_t((IUnknown*)SoapConnector->InputStream));
// 创建soap消息
//Serializer->StartEnvelope("soap","","");
Serializer->StartEnvelope("","","");
Serializer->StartBody("");
Serializer->StartElement("LeadChestRequest","http://www.dtiot.cn/fsy/schemas","","");
//Serializer->StartElement("LeadChestRequest","","","");
Serializer->StartElement("leadNum","","","");
Serializer->WriteString("QX000001");
Serializer->EndElement();
Serializer->StartElement("tagNum","","","");
Serializer->WriteString("BQ000001");
Serializer->EndElement();
Serializer->StartElement("collectionDate","","","");
Serializer->WriteString("2011-12-20 8:58:40");
Serializer->EndElement();
Serializer->StartElement("lat","","","");
Serializer->WriteString("40.23");
Serializer->EndElement();
Serializer->StartElement("lon","","","");
Serializer->WriteString("118.123");
Serializer->EndElement();
Serializer->StartElement("doseRate","","","");
Serializer->WriteString("0.123");
Serializer->EndElement();
Serializer->StartElement("type","","","");
Serializer->WriteString("TP02");
Serializer->EndElement();
Serializer->EndElement();
Serializer->EndBody();
Serializer->EndEnvelope();
hr=SoapConnector->EndMessage();
if(FAILED(hr)) return "";
Reader.CreateInstance(__uuidof(SoapReader30));
//Reader->Load(_variant_t((IUnknown*)SoapConnector->OutputStream), _T(""));
Reader->Load(_variant_t((IUnknown*)SoapConnector->OutputStream), "");
CString aaa;
aaa.Format("Answer is:%s", (const char*)Reader->RpcResult->text);
return aaa;
//return CString((const char *)Reader->RpcResult->text);
}
catch (_com_error e)
{
CString message;
//TRACE("Error:\n");
//TRACE("Code = %08lx\n", e.Error());
//TRACE("Code meaning = %s\n", (char*) e.ErrorMessage());
//TRACE("Source = %s\n", (char*) e.Source());
//TRACE("Description = %s\n", (char*) e.Description());
message.Format("Code = %08lx\n", e.Error());
message.Format("Code meaning = %s\n", (char*) e.ErrorMessage());
message.Format("Source = %s\n", (char*) e.Source());
message.Format("Description = %s\n", (char*) e.Description());
return (CString)(char*)e.Description();
}
}
void CallService()
{
CString str,strWord;
//GetDlgItem(IDC_EDIT1)->GetWindowText(strWord);
str=BeginSoap("QX000001","BQ000001","2011-12-20 8:58:40","40.23","118.123","0.123","TP02","http://mrms.kvsoft.cn:88/ydfsy/sws/fsy/ydfsyremote.wsdl");
// AfxMessageBox(str);
}
void main()
{
CoInitialize(NULL);
CoInitialize(NULL);
CallService();
CoUninitialize();
}
各位师哥师姐,为啥我接收到的数据总是“Answer is:false”,是数据格式不对,还是???
就是给http://mrms.kvsoft.cn:88/ydfsy/sws/fsy/ydfsyremote.wsdl 发送数据。
参考了http://crazycoder.cn/CDevelopment/Article44544.html 里面的内容 ,现在不知道怎么搞了……
解决方案1:
可以直接用编译器导入WSDL,帮你生成代理类,然后你就可以直接调用对象方法了