利用soaplib搭建webservice详细步骤和实例代码


Posted in Python onNovember 20, 2013

最近在搞基于python的webservice项目,今天为把环境给配好,折腾了不少时间,还是把配的过程记录下来,以后备用:
首先你系统上要有python,这个不必说啦,我系统上用的是2.7+
其次,要用python进行webservice开发,还需要一些库:
lxml :
命令行下 sudo easy_install lxml 就能安装

pytz :
 命令行下 sudo easy_install pytz 就能安装

soaplib:
进行webservice开发必须要用的库,可以在https://github.com/volador/soaplib拿到,注意要先安装上面两个插件再安装这个,因为这个依赖于上面两个插件,把zip拿下来后解压,sudo python setup.py install 就能安装了。

Soaplib is an easy to use python library for publishing soap web services using WSDL 1.1 standard, and answering SOAP 1.1 requests. With a very small amount of code, soaplib allows you to write a useful web service and deploy it as a WSGI application.

soaplib是python的soap框架,可以用来建立webservice.soaplib这样在这里下载:https://github.com/volador/soaplib

装好soaplib后新建一个test.py,建立一个webservice,实现返回两个整数相加的和。代码如下:

# -*- coding: cp936 -*-
import soaplib
from soaplib.core.util.wsgi_wrapper import run_twisted #发布服务
from soaplib.core.server import wsgi
from soaplib.core.service import DefinitionBase  #所有服务类必须继承该类
from soaplib.core.service import soap  #声明注解
from soaplib.core.model.clazz import Array #声明要使用的类型
from soaplib.core.model.clazz import ClassModel  #若服务返回类,该返回类必须是该类的子类
from soaplib.core.model.primitive import Integer,String
class C_ProbeCdrModel(ClassModel):
        __namespace__ = "C_ProbeCdrModel"
        Name=String
        Id=Integer
class AdditionService(DefinitionBase):  #this is a web service      
        @soap(Integer,Integer,_returns=String)
        def addition(self,a,b):
                return str(a)+'+'+str(b)+'='+str(a+b)       
        @soap(_returns=Array(String))
        def GetCdrArray(self):
                L_Result=["1","2","3"]
                return L_Result
        @soap(_returns=C_ProbeCdrModel)
        def GetCdr(self): #返回的是一个类,该类必须是ClassModel的子类,该类已经在上面定义
                L_Model=C_ProbeCdrModel()
                L_Model.Name=L_Model.Name
                L_Model.Id=L_Model.Id
                return L_Model            
if __name__=='__main__':  #发布服务       
        try:
                print '服务已经开启'
                from wsgiref.simple_server import make_server
                soap_application = soaplib.core.Application([AdditionService], 'tns')
                wsgi_application = wsgi.Application(soap_application)
                server = make_server('localhost', 7789, wsgi_application)
                server.serve_forever()
        except ImportError:
                print 'error'

在浏览器中访问http://127.0.0.1:7789/SOAP/?wsdl出现一大版的xml而不是访问错误,就说明服务添加成功啦
在命令行下既可以测试

>>>from suds.client import Client
>>> test=Client('http://localhost:7789/SOAP/?wsdl')
>>> print test.service.addition(1,2)
1+2=3

问题注意:代码运行过程中,会出现各种模块没找到,那是因为你没有安装,根据提示,google搜索下载安装就好,如果是windows,找不到exe,zip格式的安装文件,下载tar.gz也行的,解压后在cmd切换到解压目录,执行:python setup.py install便安装成功了。
第一次建立连接很慢很慢,慢到无法忍受,>>> test=Client('http://localhost:7789/SOAP/?wsdl'),不知道是怎么回事。

Python 相关文章推荐
用python做一个搜索引擎(Pylucene)的实例代码
Jul 05 Python
flask中主动抛出异常及统一异常处理代码示例
Jan 18 Python
python删除过期log文件操作实例解析
Jan 31 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
Python使用try except处理程序异常的三种常用方法分析
Sep 05 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
Python接口自动化判断元素原理解析
Feb 24 Python
详解Python 最短匹配模式
Jul 29 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 Python
Pytorch中Softmax与LogSigmoid的对比分析
Jun 05 Python
python从ftp下载数据保存实例
Nov 20 #Python
python正则表达式抓取成语网站
Nov 20 #Python
python爬取网站数据保存使用的方法
Nov 20 #Python
使用python搭建Django应用程序步骤及版本冲突问题解决
Nov 19 #Python
python解析json实例方法
Nov 19 #Python
python聊天程序实例代码分享
Nov 18 #Python
python实现系统状态监测和故障转移实例方法
Nov 18 #Python
You might like
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
解析thinkphp中的M()与D()方法的区别
2013/06/22 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
Smarty变量用法详解
2016/05/11 PHP
PHP如何根据文件头检测文件类型实例代码
2018/10/14 PHP
javascript编程起步(第七课)
2007/02/27 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
javascript对下拉列表框(select)的操作实例讲解
2013/11/29 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
Vue elementui字体图标显示问题解决方案
2020/08/18 Javascript
[16:56]heroes英雄教学 司夜刺客
2014/09/18 DOTA
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
python使用beautifulsoup从爱奇艺网抓取视频播放
2014/01/23 Python
跟老齐学Python之大话题小函数(2)
2014/10/10 Python
极简的Python入门指引
2015/04/01 Python
在Python中使用正则表达式的方法
2015/08/13 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
Python打印输出数组中全部元素
2018/03/13 Python
Python3实现的爬虫爬取数据并存入mysql数据库操作示例
2018/06/06 Python
python sorted函数的小练习及解答
2019/09/18 Python
Python递归调用实现数字累加的代码
2020/02/25 Python
Python基于Webhook实现github自动化部署
2020/11/28 Python
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
会计求职自荐信
2014/06/20 职场文书
学习十八大的心得体会
2014/09/01 职场文书
刑事撤诉申请书
2015/05/18 职场文书
win7配置本地ftp服务器的图文教程
2022/08/05 Servers