Python开发WebService--使用soaplib库
- Python开发WebService--使用soaplib库
-
使用soaplib开发基于Python语言的WebService主要有以下四个步骤:
一、准备环境
S1:下载插件Python、soaplib、Twisted、lxml(soaplib依赖于lxml这个库)
S2:使用easy_install快速安装,如进入Python安装目录下(该目录必须已经添加到环境变量),输入命令:easy_install soaplib,easy_install这个工具会自动 到Internet上帮我们寻找最适合本机安装的版本并自动安装,安装完毕即可。
S3:我的环境配置:Python 2.7 、Twisted-12.0.0-py2.7、soaplib-2.0.0_beta2-py2.7、lxml-2.3-py2.7-
二、开发WebService
S1:使用Python开发工具,这里推荐两个Python开发工具(1:JetBrains Pycharm;2:Eclipse),在新建的Py文件中导入以下命名空间:
import soaplib
from soaplib.core.util.wsgi_wrapper import run_twisted #(用来启动服务,soaplib1.0不是这样引用的,这是2.0的引用方式)
from soaplib.core.server import wsgi
from soaplib.core.service import DefinitionBase #(所有的服务类都继承DefinitionBase基类)
from soaplib.core.service import soap #(soap标识方法的特性)
from soaplib.core.model.clazz import Array #(Array是返回集合类型的数据)
from soaplib.core.model.binary import Attachment
from soaplib.core.model.clazz import ClassModel #(如果返回的是实体类的话,必须继承ClassModel基类)
from soaplib.core.model.primitive import Integer,String,Boolean #(Integer是返回整形,String是返回字符串类型,Boolean是返回布尔类型)
S2:下面是一个简单的例子:
class HelloWorldService(DefinitionBase):
@soap(String, _returns=String) #(标识方法的实参以及返回值,输入参数可以定义多个,该方法要求输入字符串,返回字符串)
def say_hello(self, name):#(如果有传入参数的话,按照顺序写)
return "Hello %s!" % name#(返回值)
@soap(_returns=Array(String))#(该方法没有输入参数的定义,返回字符串类型的集合,其中Array中必须写返回的具体数据类型)
def GetCdrArray(self):
L_Result=["1","2","3"]#(返回集合数据的格式)
return L_Result
@soap(_returns=C_ProbeCdrModel)#(该方法没有输入参数的定义,返回实体类C_ProbeCdrModel类型,类的定义详见最后)
def GetCdr(self):
L_Obj=C_ProbeCdr()
L_Model=C_ProbeCdrModel()
L_Model.Name=L_Result.Name
L_Model.Id=L_Result.Id
return L_Result
class C_ProbeCdrModel(ClassModel):#(返回的是实体类的,必须继承ClassModel基类)
__namespace__ = "C_ProbeCdrModel"
Name=String#(定义属性的数据类型为String)不能省略数据类型
Id=Integer#(定义属性的数据类型为Integer)不能省略数据类型
三、发布Webservice
if __name__=="__main__":
soap_app=soaplib.core.Application([HelloWorldService], 'tns')#(中括号伪服务类的名称)
wsgi_app=wsgi.Application(soap_app)
print 'listening on 127.0.0.1:7789'
print 'wsdl is at: http://127.0.0.1:7789/SOAP/?wsdl'
run_twisted( ( (wsgi_app, "SOAP"),), 7789)#(运行twisted服务器加载该服务)
四、访问Python发布的WebService
S1:在浏览器重访问http://127.0.0.1:7789/SOAP/?wsdl,如果正常的话,则能看到该服务的描述信息,包括各个方法的输入参数、返回值,以及实体类的信息(如果用到了的话)
S2:此时使用你自己的开发语言通过添加服务引用进行服务接口的调用就可以了。
以上若有纰漏之处,还请不吝点拨,共同提高,非常感谢!
Python开发WebService--使用soaplib库的更多相关文章
- python 开发webService
最近在学习用python 开发webservice,费了半天时间把环境搭好,记录下具体过程,以备后用. 首先系统上要有python.其次要用python进行webservice开发,还需要一些库: 1 ...
- 使用python开发WebService
使用python开发WebService 分类: web linux2009-03-30 11:36 6621人阅读 评论(1) 收藏 举报 webservicepythonsoapimportecl ...
- Python开发WebService:REST,web.py,eurasia,Django
Python开发WebService:REST,web.py,eurasia,Django 博客分类: Python PythonRESTWebWebServiceDjango 对于今天的WebSe ...
- Python开发:部分第三方库无法在线安装解决方法
前言:Python开发:Python2和Python3的共存和切换使用 一.问题如下: 1.截图: 2.错误信息: Could not find a version that satisfies th ...
- 基于Python的Webservice开发(一)-简介
之前为了解决Webservice的开发,直接用Python自带的CGI模块挂在IIS上. 但是该方式开发Soap的接口,需要大量的开发,而且安全方面也存在很多问题. 我推荐关于用Python开发Web ...
- python通过webservice连接cmdbuild
cmdbuild的部署可以查看文章:http://20988902.blog.51cto.com/805922/1541289 部署成功后,访问http://192.168.1.1:8080/cmdb ...
- Python开发:Python2和Python3的共存和切换使用
从python2到python3,这两个版本可以说是从语法.编码等多个方面上都有很大的差别.为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容,也就是说许多针对早期Python2版 ...
- Python 开发与测试 Webservice(SOAP)
WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 理解WebService 1.从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是 ...
- 基于Python的Webservice开发(四)-泛微OA的SOAP接口
一.功能需求 泛微e-cology可以在流程中调用Webservice接口实现与其他系统的联动等复杂功能.但是目前泛微文档中仅提供了调用的方法,但是没有关于接口的相关开发信息. 本次案例是用Pytho ...
随机推荐
- 之前写的页面导出Excel表格
废话不多说,直接上代码 <%@ page language="java" import="java.util.*" pageEncoding=" ...
- beego框架学习(二) -路由设置
路由设置 什么是路由设置呢?前面介绍的 MVC 结构执行时,介绍过 beego 存在三种方式的路由:固定路由.正则路由.自动路由,接下来详细的讲解如何使用这三种路由. 基础路由 从beego1.2版本 ...
- 不错的点击li标签删除的例子
<script type="text/javascript">function delElement(obj){ obj.parentNode.removeChild( ...
- 清晰理解redux中的
首先需要明白 Redux 的单一状态树的概念,所谓的单一状态树,就是指“所有的 state 都以一个对象树的形式储存在一个单一的 store 中.” 比如我们有这么一个状态树(或者你叫它状态对象也行) ...
- kh67-wjs
个人简历 基本信息 姓 名: 性 别: 年 龄: 籍 贯: 联 ...
- mnist数据集下载——mnist数据集提供百度网盘下载地址
mnist数据集是由深度学习大神 LeCun等人制作完成的数据集,mnist数据集也常认为是深度学习的“ Hello World!”. 官网:http://yann.lecun.com/exdb/mn ...
- Metinfo4.0 /member/save.php 任意用户密码修改
- 【VS开发】浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个 ...
- C++中的异常处理(上)
1,C++ 内置了异常处理的语法元素 try ... catch ...: 1,try 语句处理正常代码逻辑: 2,catch 语句处理异常情况: 3,try 语句中的异常由对应的 catch 语句处 ...
- laravel修改用户模块的密码验证
做项目的时候,用户认证几乎是必不可少的,如果我们的项目由于一些原因不得不使用 users 之外的用户表进行认证,那么就需要多做一点工作来完成这个功能. 现在假设我们只需要修改登录用户的表,表名和表结构 ...