Webservice简介
WebService是一种跨语言、跨操作系统平台的远程调用技术。
跨语言:是指服务端、客户端程序的编程语言可以不同。
跨操作系统平台:是指服务端、客户端可在不同的操作系统上运行。
远程调用技术:远程调用是指一台设备上的程序A可以调用另一台设备上的方法B。
WebService是指一个应用程序向外界暴露了一个能通过Web调用的API接口,我们把调用这个WebService的应用程序称作客户端,把提供这个WebService的应用程序称作服务端。
WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何通过Web实现互操作性,通过WebService标准对服务进行查询和访问。
原理介绍
一、MES做请求方
MES做请求方向其他系统发送请求,调用服务端脚本,发送请求体至MES服务,调用python ice服务发送请求至其他系统服务器,对方处理完毕后,返回响应体至python ice服务,最终回到MES系统。
二、MES做服务方
MES做服务方,其他系统向MES发送请求,python webservice服务接收请求后,回调Python ice服务,向MES服务发送请求,MES系统处理完毕后,返回响应体至Python ice服务,最终由Python webservice服务返回响应体至对方系统。
三、环境介绍
Webservice所编写语言为Python语言,Python为一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。只需与第三方包集成即可完成Webservice的编写。
Python版本:3.7.5 (32位)
安装过程注意事项:
1、双击打开exe安装包后,勾选左下角Add Python to Path(非常重要,必须勾选,安装python环境到系统环境变量中,忘记勾选,需要自己配环境变量)
2、安装完后打开cmd命令提示符,输入python,进入python环境,输入print(‘test’),回车,查看命令执行情况,判断python是否安装成功。
测试完成后,需退出python测试环境,在进行python依赖包安装。
退出python测试环境,在当前测试命令窗输入exit()回车即可退出。
Python第三方包安装命令(需要退出python测试环境):
pip3 install zeroc-ice
pip3 install pyodbc
pip3 install django-pyodbc-azure
pip3 install Django
pip3 install lxml
pip3 install spyne
pip3 install cherrypy
pip3 install pywin32
pip3 install sqlalchemy
pip3 install suds-py3
注意事项:如果安装较慢请求超时报错,在上述pip命令包名前install后加上以下参数,python安装包下载多为国外镜像,下载较慢,请求时间过长,会出现超时报红的问题。
-i https://pypi.tuna.tsinghua.edu.cn/simple
例:pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple zero-ice
四、验证ice服务运行环境(MES做请求方用到)
上述操作安装成功后,打开tn_soap文件夹(客户端),打开cmd,cd到当前文件夹路径下
在该路径下输入python tn_ice_server_app.py命令,查看运行情况,出现以下情况为运行成功。
注意:若不出此信息或报错,表示当前路径下python所依赖环境包有问题,需要更换依赖包。
五、验证cherrypy服务运行环境(MES做服务方用到)
打开tn_soap_server文件夹(服务端),打开cmd,cd到当前文件夹路径下,在该路径下输入python yj_soap_cherrypy_demo.py命令,查看运行情况,出现以下情况为运行成功。
1、若不成功,则为代码错误或依赖包出错,请更换依赖包。
2、若python服务端在运行时,会依赖spyne包,若spyne在python3下运行报错,请修改 以下路径的null.py文件,将所有async 替换为 is_async (因为async是关键字 )。
null.py的路径地址为本机python环境依赖包中的地址:C:\Users\mayn\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\spyne\server\null.py
3、使用python服务,请注意安装win32服务,使用以下命令进行安装。
python yj_soap_cherrypy_win32_demo.py install
安装完服务后,若启动程序报错,win32服务启动时,报“服务没有及时响应启动或控制请求”
运行python服务的可执行文件pythonservice.exe (具体路径可以从win32服务管理中查看),缺少pywintypes37.dll
解决方法:设置到环境变量或者将此dll copy到Python37\Lib\site-packages\win32
六、MES做请求方详细步骤
MES在Webservice中做请求方,Lua做业务处理,调用Python ice服务中的python脚本向外发送请求即可。
根据上述描述对环境进行安装,上述操作步骤全部成功后,再进行以下步骤。
- 文件环境介绍
tn_ice_server_app.py为python ice服务运行文件
tn_eutils_base.py、tn_eutils_base.pyc、tn_eutils_base.pyd为ice服务运行依赖tn基础库包,非常重要
tn_eutils_ice.py、tn_eutils_ice.pyc为ice运行依赖tn系统库包
其余dll文件为系统所依赖的系统环境包
Soap_client文件夹为被调用的py接口文件存放路径,运行ice服务后,服务会自动读取soap_client文件夹下的所有接口文件,方便后续lua调用。
详细步骤:
1、启动python ice服务,步骤参考上述验证ice服务运行环境步骤
2、编写lua服务端调用脚本
3、编写python ice服务端py脚本文件
4、打开客户端接口测试,在方法命中输入lua脚本名称,与测试服务端方法一致,根据业务逻辑判断是否响应成功。
七、MES做服务方详细步骤
MES做服务方,与请求方原理一致,都是通过Lua处理业务,待业务处理完成后,返回给Python服务,再用Python返回给外部请求方即可。按照上述环境安装步骤安装完成对应的依赖库以及服务,参照服务方运行环境验证服务方环境是否正常。
文件环境介绍
yj_soap_cherrypy_demo.py为python服务运行包,对方在请求时,会通过此py文件读取soap_app下的文件名。
yj_soap_cherry_win32_demo.py为运行服务,需要安装一般启动使用yj_soap_cherrypy_demo来作为服务文件。
Soap_app文件夹中保存的为对应的接口py文件。通过此文件夹,可以访问对应的接口,MES做Webservice服务时,该文件夹路径下的每个文件,都代表一个接口。
详细步骤:
1、启动python ice服务,步骤参考上述cherrypy服务运行环境步骤
2、编写python脚本
编写xml请求体,这里表示请求方发送的请求体字段
请求体参数传入后,通过执行函数处理请求体参数
3、测试可使用soupUI进行测试,url为服务端运行打印的url,输入相关参数,进行具体测试。
八、Python请求端、服务端日志添加办法
不同接口,对应不同接口日志,接口日志文件全部存放在服务运行文件当前log文件夹下。
1)请求端日志获取办法
在对应接口python文件下,编写接口日志文档,获取请求与响应内容,作为信息记录。
2)服务端日志获取办法
九、Python接口转码办法(对应PDA端动态显示接口返回信息)
仅请求端接收返回错误信息使用
针对不同系统,需要了解对方系统系统所返回信息的编码规范,根据编码规范,进行具体解码。
具体步骤:
1)在python接口文件中,进行转码。(非常重要)
2)在lua接收文件中,进行解码。(非常重要)
十、Python soap_client发送请求后ice服务宕机的解决办法
发送请求后,请求未发送成功,soap_ice服务会宕机,若出现此类情况,请检查soap服务的python文件是否语法正确,若语法不正确,在运行后,服务会宕机,所以运行时一定要检查python脚本文件是否书写正确。
下边列出可能引起宕机的错误:
1)在python文件开头进行导入操作,若缺少依赖包,则编译文件时会报错,服务会宕机
2)在书写python时,需要注意区分lua语法python语法的区别,切勿在python后加分号;
特别注意
MES做请求方,在进行接口转发时,会因为编码问题转码失败,导致接口请求错误。
以下是错误提示
正确的方法