web serveice工作日志

业务场景:海康视频平台为第三方接口,工作系统开发需要接入海康的视频接口,在自己的业务平台中播放海康接到的视频。
业务基础:海康的平台接口为web serveice接口。
技术准备:

1.什么是web service?

soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式Content-type设置为:text/xml任何数据都可以xml化。

2.相对http(post/get)有好处吗?

a.接口中实现方法和要求参数一目了然
b.不用担心大小写问题
c.不用担心中文urlencode
d.代码中不用多次声明认证(账号,密码)参数
e.传递参数可以为数组,对象等。。。

3.速度如何?是否可被http(post/get)替代

由于需要进行xml解析,速度会有所降低。
完全可以被替代。
参考文章:https://www.cnblogs.com/leeego-123/p/10404631.html
代码示例:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>海康视频测试</title>
<meta charset="UTF-8">
</head>
<body onload="init();">
	<!-- web端初始化视频窗口 -->
	<object classid="clsid:6DABF69C-7610-4D25-BC4F-664003130B94"
			id="RealTimePlayOcx" width="100%" height="100%"
			name="RealTimePlayOcx">
		<param name="theme" value="blue">
		<param name="showType" value="5">
	</object>
	<div class="selWinNum">
		<select id="selsplit" onchange="setWindowsLayout()">
			<option value="1">请选择窗口布局</option>
			<option value="1">1*1</option>
			<option value="2">2*2</option>
			<option value="3">3*3</option>
			<option value="5">4*4</option>
		</select>
		<button onclick="login()">登录</button>
		<input type="text" id="inputVal"/>
		<button onclick="getVideoInFo()">播放视频</button>
		<button onclick="stopPreview()">停止播放</button>
	</div>
	<div class="selWinNum">
	</div>
	<script>
		/* 初始化页面 */
		function init() {
			var loginData = 1;
			var RealTimePlayOcx = document.getElementById("RealTimePlayOcx");
			console.log("页面初始化。。。")
		}

		function applyXML(a) {
			var RealTimePlayOcx = document.getElementById("RealTimePlayOcx");
			var xml = a;
			var wnd = RealTimePlayOcx.GetCurrentSelectWindow();
			RealTimePlayOcx.StartPreview(xml.replace(/&lt;/g, "<"), wnd);

		}

		// 停止预览
		function stopPreview(){
			var RealTimePlayOcx = document.getElementById("RealTimePlayOcx");
			var wnd = RealTimePlayOcx.GetCurrentSelectWindow();
			RealTimePlayOcx.StopPreview(wnd);
		}

		// 切换分屏
		function setWindowsLayout() {
			var selectDom = document.getElementById('selsplit')
					, index = selectDom.selectedIndex
					, value = selectDom[index].value;
			var RealTimePlayOcx = document.getElementById("RealTimePlayOcx");
			RealTimePlayOcx.SetLayoutType(Number(value));
		}
	</script>

	<script>
		var videoToken = "";
		var cameraIndexCode = "13010402001310001221";
		var xmlhttp = new XMLHttpRequest();
		function login() {
			var URL="http://10.122.2.211:80/vms/services/VmsSdkWebService/sdkLogin?wsdl=";
			var data = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
					"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ws=\"http://ws.vms.ivms6.hikvision.com\">\n" +
					"   <soapenv:Header/>\n" +
					"   <soapenv:Body>\n" +
					"      <ws:sdkLogin>\n" +
					"         <ws:loginAccount>admin</ws:loginAccount>\n" +
					"         <ws:password>8122cba12b897aa5546baf90b6c82c9f646f976b3555033cbc5e0b72d4f7a5bc</ws:password>\n" +
					"         <ws:serviceIp>10.122.2.211</ws:serviceIp>\n" +
					"         <ws:clientIp></ws:clientIp>\n" +
					"         <ws:clientMac></ws:clientMac>\n" +
					"      </ws:sdkLogin>\n" +
					"   </soapenv:Body>\n" +
					"</soapenv:Envelope>";
			xmlhttp.onreadystatechange = callback1;
			xmlhttp.open('post',URL, true);
			xmlhttp.setRequestHeader("Content-Type","text/xml; charset=utf-8");
			xmlhttp.send(data);
		}
		function callback1() {
			if (xmlhttp.readyState == 4) {
				if (xmlhttp.status == 200) {
					console.log(xmlhttp.responseText);
					xmlNode(xmlhttp.responseText);
				} else {
					console.log('ready');
				}
			} else if(xmlhttp.readyState == 0){
				console.log('登录请求未初始化');
			} else if(xmlhttp.readyState == 1){
				console.log('登录服务器连接已建立');
			} else if(xmlhttp.readyState == 2){
				console.log('登录请求已接收');
			} else if(xmlhttp.readyState == 3){
				console.log('登录请求处理中');
			}
		}
		// 解析登录返回xml
		function xmlNode(node) {
			var str = node;
			var aPos = str.indexOf('tgt="');
			var bPos = str.indexOf('netzoneid');
			videoToken = str.substr(aPos + 5, bPos - aPos -7);
			console.log("videoToken:------------- "+videoToken);
			var t2 = window.setInterval(function() {
				apllyToken(videoToken);
			},30000)
			// window.clearInterval(t2)  // 去除定时器
		}
		function apllyToken(tokenCode) {
			var URL="http://10.122.2.211:80/vms/services/VmsSdkWebService/applyToken?wsdl";
			var data = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
					"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ws=\"http://ws.vms.ivms6.hikvision.com\">\n" +
					"   <soapenv:Header/>\n" +
					"   <soapenv:Body>\n" +
					"      <ws:applyToken>\n" +
					"         <ws:token>" + tokenCode + "</ws:token>\n" +
					"      </ws:applyToken>\n" +
					"   </soapenv:Body>\n" +
					"</soapenv:Envelope>";
			xmlhttp.onreadystatechange = callback2;
			xmlhttp.open('post',URL, true);
			xmlhttp.setRequestHeader("Content-Type","text/xml; charset=utf-8");
			xmlhttp.send(data);
		}
		function callback2() {
			if (xmlhttp.readyState == 4) {
				if (xmlhttp.status == 200) {
					var data = xmlhttp.responseText;
				}
			}
		}

		function getVideoInFo() {
			var cameraCode = document.getElementById('inputVal').value;
			console.log(cameraCode);
			if (!cameraCode) {
				alert('请输入视频编号');
			    return;
			}
			var URL="http://10.122.2.211:80/vms/services/VmsSdkWebService/getPreviewOcxOptions?wsdl";
			var data = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
					"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ws=\"http://ws.vms.ivms6.hikvision.com\">\n" +
					"   <soapenv:Header/>\n" +
					"   <soapenv:Body>\n" +
					"      <ws:getPreviewOcxOptions>\n" +
					"         <ws:token>" + videoToken + "</ws:token>\n" +
					"         <ws:cameraIndexCode>"+ cameraCode +"</ws:cameraIndexCode>\n" +
					"         <ws:clientIp>10.122.2.211</ws:clientIp>\n" +
					"      </ws:getPreviewOcxOptions>\n" +
					"   </soapenv:Body>\n" +
					"</soapenv:Envelope>";
			xmlhttp.onreadystatechange = callback3;
			xmlhttp.open('post',URL, true);
			xmlhttp.setRequestHeader("Content-Type","text/xml; charset=utf-8");
			xmlhttp.send(data);
		}
		function callback3() {
			if (xmlhttp.readyState == 4) {
				if (xmlhttp.status == 200) {
					subVideoInfo(xmlhttp.responseText)
				} else {
					console.log('ready');
				}
			} else if(xmlhttp.readyState == 0){
				console.log('监测点信息请求未初始化');
			} else if(xmlhttp.readyState == 1){
				console.log('监测点信息服务器连接已建立');
			} else if(xmlhttp.readyState == 2){
				console.log('监测点信息请求已接收');
			} else if(xmlhttp.readyState == 3){
				console.log('监测点信息请求处理中');
			}
		}
		function subVideoInfo(videoInfo) {
			var str = videoInfo;
			var aPos = str.indexOf('return>');
			var bPos = str.indexOf('</ns:return>');
			var a = str.substr(aPos + 7, bPos - aPos);
			applyXML(a);
			console.log("检测点信息xml:"+a)
		}
	</script>
</body>
</html>

写在后面:接口可以使用soapUI进行调试,调通接口之后,将web service需要的传值的整个xml格式复制,放在http的data传值中。
webservice接口简单来看就是把原来传的json变成xml格式字符串,接收到的result也是xml格式的字符串,需要解析xml格式的字符串,拿到需要的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值