命名空间前缀及onvif测试工具问题
不知道这个问题发在这里合不合适。
我现在在linux下实现onvif协议,从csdn上下载了ONVIF_Device_Test_Tool_v12.06,服务端使用gsoap生成c程序。在实现discovery功能,参考了ghostyu博客的内容,程序运行后测试工具搜索不到设备。
跟踪程序后发现,test tools发出的xml格式是<Envelope xmlns:tds="..." xmlns="...",而stdsoap2.c在解析Envelope时发现命名空间的前缀不是SOAP-ENV就直接报SOAP_TAG_MISMATCH错误,不继续解析其他部分了
查了一些资料后觉得前缀应该没什么意义,只要命名空间是一样的就应该没问题啊
然后我在soap创建时设置了SOAP_XML_IGNORENS,忽略命名空间,tag倒是全解析了,但应答时不会发送命名空间,如tds,wsa一类,导致testtool无法识别应答的xml,跟踪发现soap->nlist存储的命名空间后来被释放了
程序在以上两种情况下soap->namespace和soap->localnamespace都是null
用的gsoap是2.8.10,2.8.8,2.8.14都试过,结果都是一样的
现在在修改stdsoap2.c文件,但总觉得这个东西应该不会这么麻烦
有做过的大侠给个建议,谢谢! gsoap onvif
[解决办法]
是不是soap版本不一致呢?soap版本有1.1和1.2版本的区别。