Webservice简介

WebService是一种跨语言、跨操作系统平台的远程调用技术。

跨语言:是指服务端、客户端程序的编程语言可以不同。

跨操作系统平台:是指服务端、客户端可在不同的操作系统上运行。

远程调用技术:远程调用是指一台设备上的程序A可以调用另一台设备上的方法B。

WebService是指一个应用程序向外界暴露了一个能通过Web调用的API接口,我们把调用这个WebService的应用程序称作客户端,把提供这个WebService的应用程序称作服务端。

WebService是建立可互操作的分布式应用程序的新平台,是一个平台,是一套标准。它定义了应用程序如何通过Web实现互操作性,通过WebService标准对服务进行查询和访问。

原理介绍


一、MES做请求方

img

MES做请求原理图

   MES做请求方向其他系统发送请求,调用服务端脚本,发送请求体至MES服务,调用python ice服务发送请求至其他系统服务器,对方处理完毕后,返回响应体至python ice服务,最终回到MES系统。

二、MES做服务方

img

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是否安装成功。

img

  • 测试完成后,需退出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到当前文件夹路径下

img

 在该路径下输入python tn_ice_server_app.py命令,查看运行情况,出现以下情况为运行成功。

img

注意:若不出此信息或报错,表示当前路径下python所依赖环境包有问题,需要更换依赖包。

五、验证cherrypy服务运行环境(MES做服务方用到)

   打开tn_soap_server文件夹(服务端),打开cmd,cd到当前文件夹路径下,在该路径下输入python yj_soap_cherrypy_demo.py命令,查看运行情况,出现以下情况为运行成功。

img

  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脚本向外发送请求即可。

根据上述描述对环境进行安装,上述操作步骤全部成功后,再进行以下步骤。

  • 文件环境介绍

img

  • 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服务端调用脚本

img

3、编写python ice服务端py脚本文件

img

4、打开客户端接口测试,在方法命中输入lua脚本名称,与测试服务端方法一致,根据业务逻辑判断是否响应成功。

七、MES做服务方详细步骤

  MES做服务方,与请求方原理一致,都是通过Lua处理业务,待业务处理完成后,返回给Python服务,再用Python返回给外部请求方即可。按照上述环境安装步骤安装完成对应的依赖库以及服务,参照服务方运行环境验证服务方环境是否正常。

文件环境介绍

img

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脚本

img

编写xml请求体,这里表示请求方发送的请求体字段

img

请求体参数传入后,通过执行函数处理请求体参数

img

3、测试可使用soupUI进行测试,url为服务端运行打印的url,输入相关参数,进行具体测试。

八、Python请求端、服务端日志添加办法

不同接口,对应不同接口日志,接口日志文件全部存放在服务运行文件当前log文件夹下。

1)请求端日志获取办法

在对应接口python文件下,编写接口日志文档,获取请求与响应内容,作为信息记录。

img

2)服务端日志获取办法

img

九、Python接口转码办法(对应PDA端动态显示接口返回信息)

仅请求端接收返回错误信息使用

针对不同系统,需要了解对方系统系统所返回信息的编码规范,根据编码规范,进行具体解码。

具体步骤:

1)在python接口文件中,进行转码。(非常重要)

img

2)在lua接收文件中,进行解码。(非常重要)

img

十、Python soap_client发送请求后ice服务宕机的解决办法

发送请求后,请求未发送成功,soap_ice服务会宕机,若出现此类情况,请检查soap服务的python文件是否语法正确,若语法不正确,在运行后,服务会宕机,所以运行时一定要检查python脚本文件是否书写正确。

下边列出可能引起宕机的错误:

1)在python文件开头进行导入操作,若缺少依赖包,则编译文件时会报错,服务会宕机

2)在书写python时,需要注意区分lua语法python语法的区别,切勿在python后加分号;

特别注意


MES做请求方,在进行接口转发时,会因为编码问题转码失败,导致接口请求错误。

img

以下是错误提示

img

正确的方法

img

Copyright © TouchNet 2015 all right reserved,powered by Gitbook最后修订时间: 2022-06-21 09:21:06

results matching ""

    No results matching ""