mssoap与gsoap访问WebService的使用
发布时间:2020-12-16 22:42:58 所属栏目:安全 来源:网络整理
导读:1.mssoap使用: 本人win7 x64 vs2010测试机, 包含头,引用库,命名空间 #include "stdafx.h"#include stdio.h#include "windows.h"#import "msxml4.dll"//using namespace MSXML2;#include "msxml.h"#import "C:/Program Files (x86)/Common Files/MSSoap/B
1.mssoap使用: 本人win7 x64 vs2010测试机, 包含头,引用库,命名空间 #include "stdafx.h" #include <stdio.h> #include "windows.h" #import "msxml4.dll" //using namespace MSXML2; #include "msxml.h" #import "C:/Program Files (x86)/Common Files/MSSoap/Binaries/mssoap30.dll" exclude("IStream","IErrorInfo","ISequentialStream","_LARGE_INTEGER","_ULARGE_INTEGER","tagSTATSTG","_FILETIME") using namespace MSSOAPLib30;测试代码: void CMFCTestDlg::OnBnClickedBtOutput() { // TODO: 在此添加控件通知处理程序代码 CoInitialize(NULL); ISoapSerializerPtr Serializer; ISoapReaderPtr Reader; ISoapConnectorPtr Connector; HRESULT hr=Connector.CreateInstance(__uuidof(HttpConnector30)); //创建连接实例 if(!SUCCEEDED(hr)) { MessageBox(_T("error")); return; } //服务所在地址和端口; Connector->Property["EndPointURL"] = "http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx?wsdl";//网上找到webservice网址 Connector->Connect(); // Connector->Property["SoapAction"] = "http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx?wsdl"; Connector->BeginMessage(); Serializer.CreateInstance(__uuidof(SoapSerializer30)); Serializer->Init(_variant_t((IUnknown*)Connector->InputStream)); Serializer->StartEnvelope("soap","","");// Serializer->SoapAttribute("xsi","http://www.w3.org/2001/XMLSchema-instance","xmlns"); Serializer->SoapAttribute("xsd","http://www.w3.org/2001/XMLSchema","xmlns"); // Serializer->SoapAttribute("soap12","http://schemas.xmlsoap.org/soap/envelope/","xmlns"); Serializer->SoapAttribute("soapenc","http://schemas.xmlsoap.org/soap/encoding/","xmlns"); Serializer->SoapAttribute("tns","http://www.webxml.com.cn/","xmlns"); Serializer->SoapAttribute("types","http://www.webxml.com.cn/encodedTypes","xmlns"); Serializer->StartBody(L"NONE"); Serializer->StartElement("getEnCnTwoWayTranslator","http://WebXml.com.cn/","NONE","xmlns"); // 开放的接口 Serializer->StartElement("Word","");//参数 Serializer->SoapAttribute("xsi:type","xsd:string",""); Serializer->WriteString("hello"); //传参 Serializer->EndElement(); Serializer->EndElement(); Serializer->EndBody(); Serializer->EndEnvelope(); Connector->EndMessage(); Reader.CreateInstance(__uuidof(SoapReader30)); Reader->Load(_variant_t((IUnknown*)Connector->OutputStream),""); SetDlgItemText(IDC_EDIT1,Reader->RpcResult->xml);//(const char*) } 2.gsoap使用: 首先官网下载windows版zip解压,在bin目录下有两个exe,命令行中使用wsdl2h或soapcpp2 -h可查看可使用命令。
wsdl2h.exe? 解析WebService的wsdl文件或者相应的URL,本测试-o导出到*.h. soapcpp2.exe 编译WebService代码,编译解析后得到的*.h文件. 生成文件较多。如果是客户端使用可加参数 -C编译。包含头:
#include "sf/soapStub.h" #include "sf/soapH.h" #include "sf/procSMSSoapBinding.nsmap" void CMFCTestDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 soap sService; _ns1__getEnCnTwoWayTranslator *pTrans = new _ns1__getEnCnTwoWayTranslator; CString strWord(_T("word")); pTrans->Word = new std::string(UnicodeToUTF8(strWord)); _ns1__getEnCnTwoWayTranslatorResponse TransResp; soap_init(&sService); soap_set_mode(&sService,SOAP_C_UTFSTRING);//SOAP_C_UTFSTRING,SOAP_C_MBSTRING soap_call___ns1__getEnCnTwoWayTranslator(&sService,"http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx?wsdl","http://www.webxml.com.cn/WebServices/TranslatorWebService.asmx/",pTrans,TransResp); ns1__ArrayOfString* pAS = TransResp.getEnCnTwoWayTranslatorResult; std::string strXml; vector<std::string>::iterator it = pAS->string.begin(); while (it != pAS->string.end()) { strXml += *it; strXml += "n"; it++; } CString strMsg(UTF8ToUnicode(strXml.c_str())); SetDlgItemText(IDC_EDIT1,strMsg);//(const char*) }两者调用都不复杂,但,个人表示,mssoap可封装性好过gsoap,当网址、接口更改时,gsoap需要重新编译生成接口文件,而mssoap只需相应调整参数即可。但mssoap往往需要自家的xml解析类,不如gsoap纯净的感觉。而且gsoap编译生成的接口文件是纯C/C++的文件,应该是跨平台的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |