系统:win7
开发环境:visual studio 2010
gsoap版本:2.8.21
onvif:使用当前最新版wsdl,在线生成框架(具体参考上一篇)
1.鉴权
对于设有用户名和密码的设备,在进行一些操作之前需要进行鉴权。gsoap用soap_wsse_add_UsernameTokenDigest函数进行鉴权。这个函数需要包含wsseapi.h头文件。要使用这个头文件还需要添加几个相关的文件(具体需要包含的文件后面详说),并且需要安装openssl。
2.编译生成openssl库文件
下载ActivePerl:http://www.activestate.com/activeperl/downloads
安装ActivePerl。在cmd里输入 perl -v看看是否能出来版本号。若提示找不到,就手动设一下环境变量,把“你的路径\Perl64\bin;你的路径\Perl64\site\bin;”添加到PATH里。
下载openssl:http://www.openssl.org/source/
解压。在根目录下有INSTALL.W32,INSTALL.W64之类的文件,描述了在各个系统下怎么样编译openssl。参考这些文件进行如下的操作。
1)打开vs2010的命令提示符输入:
>cd bin;
>vcvars32.bat
2)cd到openssl目录下
32位输入:
>perl Configure VC-WIN32
>ms\do_nasm
>nmake -f ms\ntdll.mak
64位输入:
>perl Configure VC-WIN64A
>ms\do_win64a
>nmake -f ms\ntdll.mak
*若出错:'nasm.exe' 不是内部或外部命令,也不是可运行的程序 。可以上网下一个nasm.exe,放到vs的vc\bin目录下。
执行成功后会在out32dll(out32dll64)文件夹里生成lib,dll等文件
3.vs使用openssl
在vs工程里
添加包含目录:openssl\inc32
添加静态库文件:libeay32.lib
ssleay32.lib
添加动态库文件: libeay32.dll
ssleay32.dll
添加预处理器定义:WITH_DOM
WITH_OPENSSL
(不添加预处理器定义会出现“ERR_get_error”: 找不到标识符、“RAND_pseudo_bytes”: 找不到标识符)
4.鉴权函数使用
将gsoap\plugin目录下的mecevp,smdevp,threads,wsaapi,wsseapi的.h和.c文件拷贝到工程目录下(要用cpp可以直接更改后缀),在include“wsseapi.h”,就能使用soap_wsse_add_UsernameTokenDigest函数进行鉴权了。