加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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++的文件,应该是跨平台的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读