使用Visual Studio WSDL.exe转换ONVIF WSDL文件遇问题求助
解决VS2015 wsdl.exe转换ONVIF WSDL到C++的两类问题
问题1:本地转换时提示数据类型缺失
原因
media.wsdl依赖ONVIF的核心Schema文件(如定义VideoSource的onvif.xsd),单独转换单个WSDL文件时,wsdl.exe无法自动加载依赖的Schema。
解决方案
- 下载所有依赖文件:
打开本地的media.wsdl,查找所有<import>标签,比如:
把这些<import namespace="http://www.onvif.org/ver10/schema" schemaLocation="http://www.onvif.org/ver10/schema/onvif.xsd"/>schemaLocation对应的文件(如onvif.xsd)下载到和media.wsdl同一目录。 - 执行带所有依赖文件的转换命令:
将所有依赖的WSDL和XSD文件作为参数传入,示例命令:
注意:如果还有其他依赖的文件(如其他WSDL或XSD),都需要添加到命令行参数中。wsdl /language:CPP /protocol:SOAP12 media.wsdl onvif.xsd
问题2:通过URL转换时SSL/TLS通道创建失败
原因
VS2015自带的wsdl.exe默认使用较旧的TLS版本(如TLS 1.0),而ONVIF服务器已停止对旧版TLS的支持,导致HTTPS请求被拒绝。
解决方案
有两种可行方式:
- 方式1:手动下载文件后本地转换
直接从ONVIF官网下载所需的media.wsdl及所有依赖的Schema文件到本地,然后按照问题1的解决方案执行本地转换命令,完全规避HTTPS请求问题。 - 方式2:修改注册表强制启用TLS 1.2
通过修改Windows注册表,让.NET Framework(wsdl.exe基于.NET运行)默认使用TLS 1.2:- 打开注册表编辑器(
regedit.exe)。 - 定位到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319,添加DWORD类型的SchUseStrongCrypto,值设为1。 - 若为64位系统,额外定位到
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319,添加相同的键值。 - 重启电脑后,再执行URL转换命令即可。
- 打开注册表编辑器(
内容的提问来源于stack exchange,提问作者harrywolf
相关产品推荐
相关产品推荐

