基于Matlab程序的WebServices实现研究,wsdl文件怎么生成

文件 0
计算机时代2007年第1期 ·31· 基于Matlab程序的WebServices实现研究 李俊杰1,2,何洪林2,胡社荣1,李春2,3 (1.中国矿业大学资源与安全工程学院,北京100083;2.中国科学院地理科学与资源研究所;3.沈阳农业大学) 摘要:针对当前Matlab的Web应用在集成、速度等方面存在的不足,引入网络服务的思想,提出一种结合WebServices技术,充分发挥其跨防火墙通信、完好的封装性、松耦合性、高集成性等优点,优化Matlab的Web应用。
首先,在Matlab环境下编制M程序,再利用Matcom软件将其转化为VC++可识别的C++源代码,接着嵌入到开发的COM组件中,最后通过MicrosoftSOAPToolkit工具,将其转化为WebServices,发布到服务器上。
这种网络服务方式实现的Matlab应用可以被多种客户端方便地调用,不仅能提高Matlab功能的网络共享能力和系统的运行速度,还能够拓宽Matlab的应用范围。
关键词:WebServices;Matlab;COM;VC 0引言 随着计算机网络技术的飞速发展,新一代的Web技术———WebServices逐渐显露出良好的前景,成为IT界研究的热点[1]。
WebServices具有跨防火墙通信、完好的封装性、松耦合性、高集成性以及协约、协议的规范性等特点。
与传统Web技术仅共享Web应用提供的服务不同,它可以把Web应用作为服务进行共享,并且可以被其它客户端十分方便地集成。
所以,它被业界称为继PC和Internet之后的在IT技术上的第三次革命[2]。
Matlab是当前最优秀的科学计算软件之
一,带有完备的工具包,具有强大的矩阵运算、数据处理能力和图形显示功能。
Matlab编程不像其它高级语言(如Basic、VC、Fortran和C等)那样难以掌握,它与人们进行科学计算的思路和表达方式一致,简单直观,已成为自动控制,仿真,科学计算,数字信号处理等多个领域中解决工程与科学计算问题的强大工具[3]。
Matlab广泛应用在单机上,其网络应用也逐渐成为研究的热点。
当前流行的Matlab的Web应用是利用MatlabWebServer工具或者在Matlab中调用WebServices。
前一种方式主要由MatlabWebServer,Matweb以及Matlab的M文件组成,用户通过Internet将数据发送给MatlabWeb服务器,MatlabWeb服务器再调用后台的M程序在Matlab中进行处理;后一种方式是在Matlab中调用高级语言生成的WebServices。
但是当前Matlab的Web应用还存在着一定的不足:⑴Matlab的Web应用所调用的M程序只能在庞大的Matlab环境中运行,必须在后台安装Matlab系统;⑵Matlab的M程序是一种采用命令解释机制执行的应用程序,运行速度比较慢,尤其在做循环运算、遥感图像等信息量大的运算时,问题显得尤为突出[4];⑶Web应用主要是本地平台的网络应用调用,很难被其它异质平台的网络应用集成,所以只能向外部提供简单的计算服务。
为弥补这些不足,将Matlab的M程序做成WebServices发布到Web服务器上,一方面可以使Matlab的Web应用脱离Matlab环境,提高运行效率;另一方面这种WebServices可以很方便地被其它平台集成,扩大了Matlab的应用能力。
因此,两 者的结合可以进一步扩大Matlab在各研究的应用领域。
1实现方法 目前,没有将Matlab程序直接转化为WebServices的方法,必须利用Matlab与高级语言的接口,以高级编程语言为桥梁来实现这种转化。
本研究将Matlab具有丰富工具包、易于编写程序的优点与WebServices所具有的高集成性、低耦合性的优点相结合,扬长补短,充分发挥各自优势。
具体实现方法如下: 首先,根据实际问题选择适当的算法,通过文本编辑器编写Matlab程序。

二,利用高级编程语言(VC、VB等)实现Matlab程序与外部程序的集成。
由于VisualC++一直是Windows环境下软件开发的主流平台,所以笔者选择VC++作为Matlab到WebServices转化的桥梁[5]。
VC++与Matlab间拥有多个接口:Matlab引擎(engine)、Matlab的Add-in插件、Matlab提供的C、C++接口函数库、Matlab的Mcc、Mex命令、MatlabRuntimeEngine。
在本研究中,先利用Matcom软件将前面编制的M程序转化为Cpp文件,再利用VC++编制COM组件,并通过两者的接口将Matlab程序嵌入到COM组件中。

三,利用Microsoft的MicrosoftSoapTookit工具将新生成的COM组件部署为WebServices发布到服务器上,供其它客户端集成调用,最终实现Matlab功能的共享。
技术流程图如图1所示。
图1流程图 ·32· ComputerEraNo.12007 2实例 本例所要实现的功能是,计算导入的数据与Matlab所自动生成的魔方矩阵最后一列的和。
2.1编制Matlab程序 编制的Matlab程序内容如下:functionz=getsum(x,y)%-------------------------------------%thisfunctionistocalculatethesumoftheycolofa magicandaarraym_magic=magic(y);m_absx=abs(x);m_ybeforecol=m_magic(:,y)';z=m_absx+m_ybeforecol; 将文件保存在D:\matcom45\work。
2.2嵌入COM Matcom软件是由MatWorks公司推出的M文件的解释和调试的高效集成开发环境,可以把M程序转化为VC可调用的cpp源代码文件。
转化过程如下: 首先,利用MATCOM45将M程序转化为cpp源代码,并将结果保存在D:\matcom45\samples\Debug目录下。

二,利用VC6.0的ATLCOMAppWizard生成一个名为Mat_webservice的ActiveXDLL,同时选中DynamicLinkLibrary(DLL)复选框。
在ClassView中新增一个名为CarraySum的ATL类,再给组件的接口加入一个新的方法,将其命名为Process。

三,将D:\matcom45\samples\Debug目录下的getsum.cpp和setsum.h,以及D:\matcom45\lib下面的matlib.h和v4501v文件的内容拷贝到前面生成的Mat_webservice工程目录下,并在VC中将拷贝的库文件和头文件加入到工程中:工程->添加工程->Files,选择刚刚拷贝的4个文件。
然后,在CArraySum.cpp文件中加入头文件#include"matlib.h"和#include"getsum.h"。
Process中调用Matlab程序的部分代码为: ……//callMatlabfunction initM(MATCOM_VERSION);//初始化Mmx,y;M_VECTOR(x,temp)//temp是输入数据数组y=getsum(x,Size);//调用,Size是输入数据的个数,它与魔方矩 阵的行//列数目相同for(intk=0;k<5;k++) temp[k]=(int)(y.r(1,k+1));//读取处理结果exitM();//退出类库调用//outputtheresult……其中“,initM(MATCOM_VERSION)”是初始化类库调用函数“,exitM()”是结束类库调用函数,getsum()是Matlab程序的函数。
最后,对开发环境进行设置:打开Projects->Settings->C/C++,选择C++语言,选中EnableExceptionHandling和EnableRun-TimeTypeInformation(RTTI)复选框,然后单击Build菜单 的RebuildAll选项生成COM组件。
另外,如果在编译过程中出现下列错误:"fatalerrorC1010:unexpectedendoffilewhilelookingforprecompiledheaderdirective",则要进行如下设置:打开Projects->Settings->C/C++,在分类中选择precompiledheaders项中“的自动使用预补偿页眉”。
2.3COM组件部署为WebServices MSSOAPToolkit软件是将COM组件布署为WebServices的工具,它被微软公司用来实现WebServices的架构。
目前常用的版本是MSSOAPToolkit2.0,主要包括以下五个部分: 客户端组件允许应用客户端根据WSDL对WebServices的描述调用服务器端的服务。
服务端组件可以通过指定的WSDL和WSML将服务与实现服务的COM对象的方法相对应。
方法是在WSML文件中记录一些必要的信息(调用COM的ProgID),从而使调用转向COM组件。
底层处理组件即一些具体用来创建、读取、处理SOAP消息的必要的API。
WSDLGenerator用户可以在不了解WSDL细节的情况下,在该工具中引入COM组件信息之后,自动生成WSDL、WSML。
SMO架构它提供了一个XMLDOM的开发接口,可以在SOAP消息包中直接传递XML。
WSDLGenerator工具的使用非常方便,只要按WSDLGenerator工具向导指定相应的COM对象、输出的接口函数以及发布的网址等信息,工具就会自动生成对应的WSDL和WSML文件。
然后,把WSDL和WSML拷贝到服务器对应的虚拟目录下,WebServices的部署就完成了。
通过WSDLGenerator工具可以避免手动书写WSDL和WSML的麻烦,不过此版本还无法实现复杂数据类型的映射。
因此,若有复杂数据类型的情况,还需要手动修改。
2.4Web服务调用 Web服务发布以后,可以通过多种客户端进行调用。
这些客户端既可以是VC、VB、Java、Delphy所开发的应用软件,也可以是浏览器。
若系统安装了MicrosoftSoapToolkit软件,那么通过其高层接口调用服务器端的WebServices就变得十分简单,开发人员不需要知道SOAP和XML的细节,只要在程序中指定WSDL的服务路径,SoapToolkit高程API的SoapClient对象就可以通过mssoapinit方法与WebServicess动态地绑定在一起。
根据这个路径,SoapClient对象会自动解析WSDL文件,取得服务的描述信息,如服务方法名、参数、返回值的数据类型等,并在内部生成所有WebServices的方法和参数信息。
开发人员通过在SoapClient对象名后直接加'.'的方式,来实现对网络服务的调用。
实例的主要代码如下: PrivateclientAsSoapClientPrivatesConnectedWSDLAsStringPrivateSubCallwebservice()...... (下转第34页) ·34· ComputerEraNo.12007 Labview中进行TCP通信的基本步骤和串口通信的方法类似。
2.4程序设计 根据监控系统硬件结构示意图和设计要求,可把程序流程设计成如图2所示。
图2程序设计结构2.4.1客户机端程序 客户机端用户界面如图3所示。
图3客户机端用户界面⑴用户界面的使用说明先在旋钮上选择所需要的功能,如“左”转,然后不断地按“步进”则可以实现步进左转“。
步进速度”用于调节转动速度的快慢。
⑵程序设计说明①控制命令的编码与发送:旋钮控件(程序中的“功能”节点)用来控制Case结构。
用Case结构产生所需功能的数值代码。
用TCPWrite节点把这些代码传送到服务器端。
②“步进速度”功能的设计:用SequenceStructure框图程 序把Wait(ms)节点和“停止”控制命令结合起来控制各功能运行时间,从而实现云台和摄像头的步进功能。
而且这种步进可以达到50步以上。
这可以看出用软件实现步进不仅简单,而且功能强大。
2.4.2视频服务器端程序 视频服务端要接收客户端的控制信号并把它发送到串口。
其程序设计如下:①在服务器端用TCPListen监听是否有客户请求连接,假如有的话就建立连接,并用VISAConfigureSerialPort节点对串口进行初始化。
②建立连接后用TCPRead节点从服务器读取控制代码,传送到VISAWrite节点,通过它将这些代码发送到串口,从而完成对各种功能的实现。
③用TCPCloseConnection节点关闭与客户端的连接。
用VISAClose节点关闭与串口的连接。
3结束语 用Labview实现对云台和镜头的远程控制,不仅可以控制其转动,还可以控制它的转动速度,其实现方法也比较简单。
它可以作为插件嵌入其它的远程控制实验里,使实验更加完善;同时也实现了静态摄像机不能做的远程实验。
如做远程控制核物理实验时,其装置都比较大,要对整个装置结构有清晰的印象,以加深对工作原理的认识时,就需要控制摄像机。
又如光学实验里也要不断地调整摄像机来观看实验现象以对其它设备做出相应的调整。
参考文献:[1]丰洪才,邓华来,刘年波.用ActiveX控件实现对云台和镜头的远程 控制[J].计算机应用研究,2004.6:234[2]PelcoCo.."D"PROTOCOLMANUAL[pdf].http://www.fastel. com.cn/service/download/d_protocol.pdf,2006.3.[3]周求湛等.虚拟仪器与Labview7Express程序设计[M].北京航空 航天大学出版社,2004.▲CE !
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
(上接第32页) sConnectedWSDL="http://localhost/webservice/test5.wsdl"Setclient=NewSoapClientclient.mssoapinitsConnectedWSDLresult=client.Process(input,size) 'size是输入数据input的个数与魔方矩阵的行列数目相同......EndSub 络运行的速度,进一步促进Matlab在各个研究领域的应用。
因而,它将具有十分广阔的发展前景。
参考文献:[1]DeependraMoitraa,JaiGaneshb.WebServicesandflexible businessprocesses:towardstheadaptiveenterprise[J].Information&Management,2005.42:921 ̄933[2]KonstantinBeznosova,Donald.J.Flinnb,ShirleyKawamotoc,Bret 3结束语 Matlab与WebServices技术集成既能充分利用Matlab的强大功能,又能发挥WebServices的跨防火墙通信、高集成性等优点。
将开发的M程序部署为Web服务共享,可以与其它各种平台的服务一起集成、互联,把Matlab的功能扩大到整个网络,实现最大范围的共享。
同时,也使Matlab程序的运行脱离了 Hartmand.IntroductiontoWebServicesandtheirsecurity[J].InformationSecurityTechnicalReport,2005.10:2 ̄14[3]刘俏,范圣第.基于Matlab的化工计算[J].计算机应用与软件,2005.22(12):130 ̄132[4]谢永华,傅德胜.VC++和Matlab混合编程在图像处理中的应用[J].计算机应用与软件,2005.22(2):120 ̄121[5]蒋忠进,林君,陈祖斌.在VisualC++中调用Matlab以实现数学算法 庞大的Matlab环境,与Matlab传统的Web应用相比,提高网 [J].计算机应用研究,2004.5:89 ̄91▲CE

标签: #程序 #删了 #怎么看 #少儿 #错误代码 #文件夹 #国泰 #华为