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库的更多相关文章

  1. python 开发webService

    最近在学习用python 开发webservice,费了半天时间把环境搭好,记录下具体过程,以备后用. 首先系统上要有python.其次要用python进行webservice开发,还需要一些库: 1 ...

  2. 使用python开发WebService

    使用python开发WebService 分类: web linux2009-03-30 11:36 6621人阅读 评论(1) 收藏 举报 webservicepythonsoapimportecl ...

  3. Python开发WebService:REST,web.py,eurasia,Django

    Python开发WebService:REST,web.py,eurasia,Django 博客分类: Python PythonRESTWebWebServiceDjango  对于今天的WebSe ...

  4. Python开发:部分第三方库无法在线安装解决方法

    前言:Python开发:Python2和Python3的共存和切换使用 一.问题如下: 1.截图: 2.错误信息: Could not find a version that satisfies th ...

  5. 基于Python的Webservice开发(一)-简介

    之前为了解决Webservice的开发,直接用Python自带的CGI模块挂在IIS上. 但是该方式开发Soap的接口,需要大量的开发,而且安全方面也存在很多问题. 我推荐关于用Python开发Web ...

  6. python通过webservice连接cmdbuild

    cmdbuild的部署可以查看文章:http://20988902.blog.51cto.com/805922/1541289 部署成功后,访问http://192.168.1.1:8080/cmdb ...

  7. Python开发:Python2和Python3的共存和切换使用

    从python2到python3,这两个版本可以说是从语法.编码等多个方面上都有很大的差别.为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容,也就是说许多针对早期Python2版 ...

  8. Python 开发与测试 Webservice(SOAP)

    WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 理解WebService 1.从表面上看,WebService就是一个应用程序向外界暴露出一个能通过Web进行调用的API,也就是 ...

  9. 基于Python的Webservice开发(四)-泛微OA的SOAP接口

    一.功能需求 泛微e-cology可以在流程中调用Webservice接口实现与其他系统的联动等复杂功能.但是目前泛微文档中仅提供了调用的方法,但是没有关于接口的相关开发信息. 本次案例是用Pytho ...

随机推荐

  1. Redis 常用命令 大全

    Redis 常用命令 发现几个很好的 Redis 常用命令汇总大全网页,分享给小伙伴们~ 1.Redis 命令参考 http://redisdoc.com/string/index.html 2.W3 ...

  2. oracle系统视图V$

    --数据字典表select * from v$fixed_table;select * from v$fixed_view_definition;select * from dictionary; - ...

  3. Redis 入门 3.3 散列类型

    3.3.1 介绍   散列类型(hash)的键值也是一种字典结构,其储存了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型,换句话说,散列类型不能嵌套其他的数据类型.一个散列 ...

  4. golang remote debug和docker debug

    在编写 Go 代码的时候,因为很多时候都是需要调试服务器上的代码的,作为一个年长的工程师,肯定不能用 log.Printf 来调试问题,所以我选择了 delve 这个工具,通过 delve 我可以像本 ...

  5. 如何解决idea本身的乱码以及解决代码中出现的乱码?

    1:解决idea中控制台的乱码现象(3中方法): 第一种: 如图需要找到idea的安装路径: idea\IntelliJ IDEA 2018.3.2\bin 在这个路径下面有一个文件叫:idea64. ...

  6. USACO1.6 Number Triangles [dp-简单dp]

    题目传送门 回忆童年 /* ID: Starry21 LANG: C++ TASK: ariprog */ #include<iostream> #include<string> ...

  7. 关于ElementUI中日期选择器时间选择范围限制

    1.组件代码 <el-date-picker v-model="value1" type="date" placeholder="选择日期&qu ...

  8. java 换包

    1.进入目录:cd /opt/cw_isc/ 2.查看:ls 3.查看进程:ps -ef|grep aw-sc-package-all.jar 4.杀死进程kill -9 3982 5.查看进程:ps ...

  9. 浅谈spring配置定时任务的几种方式

    网上看到好多关于定时任务的讲解,以前只简单使用过注解方式,今天项目中看到基于配置的方式实现定时任务,自己做个总结,作为备忘录吧. 基于注解方式的定时任务 首先spring-mvc.xml的配置文件中添 ...

  10. python 科学计数法转数值

    猜测python应该是有现成的模块可以解决该问题,不过没找到,所以自己简单写了个函数处理: def tranform(inputString): num_value = re.compile('^[0 ...