【氚云】基于Python的WebService与氚云系统集成

简介: 基于Python的WebService与氚云系统集成

最近一直在用Python做web项目,有些数据需要由webservice传输给氚云应用,但氚云的帮助文档里只有C#集成案例。经过一番摸索,终于调通了,这里把几点经验分享下。

 1. Python提供的webservice接口地址以“?wsdl”结尾,但在氚云系统集成中,需要将该结尾删除才能连接成功

 2. Python中的webservice接口传出协议应该用soap11,不要用soap12

 3.Invoke函数必须按照氚云要求的json字符串格式返回,否则氚云无法正确调用数据

 4.由于我没有租服务器,采用的是花生壳内网映射的办法,所以host写的是‘127.0.0.1’,你如果租的有服务器的话,可以直接写服务器的IP地址

 5.这里主要分享的是氚云调用Python数据,如果用Python调用氚云,直接调用氚云提供的openAPI接口即可,比较简单。可参考我的另外一篇帖子:《Python端调用氚云数据案例

   6.python需要安装spyne库


-------------------------------以下是Python的webservice服务端代码------------------------------

from spyne import Application, rpc, ServiceBase

from spyne import Integer, Unicode, Array, ComplexModel, Iterable, String

from spyne.protocol.soap import Soap11, Soap12

from spyne.server.wsgi import WsgiApplication

from wsgiref.simple__server import make_server

import json


# 数据指标class ItemSchema:

   def __init__(self, name, DisplayName, DataType):

       self.name = name

       self.DisplayName = DisplayName

       self.DataType = DataType



# 数据模板class StructureSchema:

   __SchemaList = []

   __Code = ''
def __init__(self, Code):

       StructureSchema.__SchemaList.clear()

       StructureSchema.__Code = Code


   def Add(self, ItemSchemaData):

       StructureSchema.__SchemaList.append(ItemSchemaData)


   def JsonToSchema(self):

       Result = {"Code": StructureSchema.__Code}

       Items = []

       for obj in StructureSchema.__SchemaList:

           strJson = {"Name": obj.name, "DisplayName": obj.DisplayName, "DataType": obj.DataType}

           Items.append(strJson)

       Result["Items"] = Items

       return Result



# 数据内容class StructureData:

   def __init__(self, name, DisplayName):

       self.name = name

       self.DisplayName = DisplayName



class ReturMessage:

   def __init__(self, ResultCode, ErrorMessage):

       self.ResultCode = ResultCode

       self.ErrorMessage = ErrorMessage


# 生成氚云格式的json字符串

def GernerateResult(schemaCode):

   itemName = ItemSchema("Name", "学生姓名", "String")

   itemAge = ItemSchema("Age", "年龄", "Int")

   SchemaTemplate = StructureSchema(schemaCode)

   SchemaTemplate.Add(itemName)

   SchemaTemplate.Add(itemAge)

   JsonSchemaTemplate = SchemaTemplate.JsonToSchema()


   results = {

       "ResultCode": 0,

       "Message": "",

       "Schema": JsonSchemaTemplate,

       "Data": {"Name": "张三", "Age": 10}

   }


   return json.dumps(results)


class H3yunWebService(ServiceBase):

   @rpc(Unicode, _returns=Unicode)

   def GetSchema(self, schemaCode):

       itemName = ItemSchema("Name", "学生姓名", "String")

       itemAge = ItemSchema("Age", "年龄", "Int")

       SchemaTemplate = StructureSchema(schemaCode)

       SchemaTemplate.Add(itemName)

       SchemaTemplate.Add(itemAge)

       JsonSchemaTemplate = SchemaTemplate.JsonToSchema()

       return json.dumps(JsonSchemaTemplate)


   @rpc(_returns=Unicode)

   def GetSchemaList(self):

       schemaList = {"XXX":"学生信息"}

       return json.dumps(schemaList)


   @rpc(Unicode, Unicode, Unicode, _returns=Unicode)

   def GetList(self, userCode, schemaCode, filter):

       results = {}

       return json.dumps(results)


   @rpc(Unicode, Unicode, Unicode, Unicode, _returns=Unicode)

   def Invoke(self, userCode, schemaCode, methodName, param):

       results = GernerateResult("XXX")

return results



application = Application([H3yunWebService],

                         'http://tempuri.org/',

                         in_protocol=Soap11(validator='lxml'),

                         out_protocol=Soap11())

wsgi_application = WsgiApplication(application)


if __name__ == '__main__':

   import logging

   host = '127.0.0.1'
port = 8000

   logging.info("listening to http://127.0.0.1:8000")

   logging.info("wsdl is at: http://localhost:8000/?wsdl")

   server = make_server(host, port, wsgi_application)

   server.serve_forever()

-------------------------以下是氚云后台调用代码-------------------

H3.BizBus.BizStructureSchema paramSchema1 = new H3.BizBus.BizStructureSchema();

paramSchema1.Add(new H3.BizBus.ItemSchema("Name", "学生姓名", H3.Data.BizDataType.ShortString, 200, null));

paramSchema1.Add(new H3.BizBus.ItemSchema("Age", "年龄", H3.Data.BizDataType.Int, 200, null));

H3.BizBus.BizStructure paramData1 = new H3.BizBus.BizStructure(paramSchema1);

paramData1["Name"] = "李四";

paramData1["Age"] = 25;

H3.BizBus.InvokeResult inResult1 = this.Request.Engine.BizBus.Invoke(H3.Organization.User.SystemUserId, H3.BizBus.AccessPointType.Legacy, "XXX", "many", paramData1);

if(inResult1 != null && inResult1.Code == 0)

{

   H3.BizBus.BizStructure returnData = inResult1.Data;

   string data = returnData["Name"] as string;

}

相关文章
|
19天前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
43 1
|
3月前
|
机器学习/深度学习 IDE 开发工具
Python集成开发环境的选择
【7月更文挑战第6天】Python集成开发环境的选择
63 2
|
14天前
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
|
11天前
|
SQL 机器学习/深度学习 数据采集
SQL与Python集成:数据库操作无缝衔接2a.bijius.com
Python与SQL的集成是现代数据科学和工程实践的核心。通过有效的数据查询、管理与自动化,可以显著提升数据分析和决策过程的效率与准确性。随着技术的不断发展,这种集成的应用场景将更加广泛,为数据驱动的创新提供更强大的支持。
|
11天前
|
SQL 机器学习/深度学习 数据库
SQL与Python集成:数据库操作无缝衔接
1. Python与SQL集成的关键步骤 在开始之前,确保你已经安装了必要的Python库,如`sqlite3`(用于SQLite数据库)或`psycopg2`(用于PostgreSQL数据库)。这些库提供了Python与SQL数据库之间的接口。
|
16天前
|
SQL 云安全 监控
通过 Python 和 SQL 集成加强云环境
通过 Python 和 SQL 集成加强云环境
26 0
|
3月前
|
Serverless 语音技术 开发工具
函数计算操作报错合集之怎么何集成nls tts python sdk
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
2月前
|
SQL 物联网 Serverless
Python集成EMQX
**EMQX**是一款实现了MQTT协议的高性能消息服务器软件,支持MQTT 3.1、3.1.1及5.0等协议,并兼容HTTP、QUIC和WebSocket等多种协议,确保广泛设备接入。作为全球下载量超千万的分布式物联网MQTT服务器,EMQX能支持单集群1亿设备连接,消息分发时延低于1毫秒,适用于构建关键业务的IoT平台与应用。EMQX具备SSL/TLS加密、双向认证、基于SQL的规则引擎等功能,并采用无主分布式架构确保高可用性和水平扩展性。提供开源版与企业版自托管方案及云服务选项,满足不同需求。通过Python SDK(如Paho-MQTT)可轻松集成,实现消息的发布与订阅。
40 0
|
3月前
|
前端开发 JavaScript API
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
【7月更文挑战第17天】现代Web开发趋势中,前后端分离配合WebSocket满足实时通信需求。Django Channels扩展了Django,支持WebSocket连接和异步功能。通过安装Channels、配置设置、定义路由和消费者,能在Django中实现WebSocket交互。前端使用WebSocket API连接后端,实现双向数据流,如在线聊天功能。集成Channels提升Web应用的实时性和用户体验,适应实时交互场景的需求。**
156 6
|
3月前
|
机器学习/深度学习 IDE 开发工具
Python集成开发环境
【7月更文挑战第6天】Python集成开发环境
62 1