soap协议_Go和SOAP

本文介绍了如何使用Go语言与SOAP服务交互,包括获取WSDL文件、自动生成SOAP包、实现SOAP客户端调用服务及构建SOAP服务。示例中展示了调用www.dneonline.com/calculator服务的加法计算,并提供了自定义SOAP服务器的实现。
摘要由CSDN通过智能技术生成
d2f3fb2105be5f3916468e92f7aeea49.png

在REST和RPC大行其道的今天,支持SOAP(简答对象访问协议)作为Web服务消息交换协议的情况是越来越少了。但在一些遗留系统中,尤其是采用微软技术栈的服务系统中,SOAP依然占有一席之地,比如在一些医院院内的IT系统中。

Go语言诞生后,主流的Web Service设计已经开始过渡到REST和RPC,Go相关开源项目也以对REST和RPC的支持为主。而对SOAP的支持则少而零散,社区里也没有对SOAP支持的重量级开源项目,在awesome go的各种list中也难觅有关SOAP的推荐项目的身影。

但Gopher世界还是有以client身份与SOAP service交互或是实现SOAP server的需求的。在这篇文章中,我就和大家一起来探索一下如何基于一些开源项目,使用Go实现SOAP client和SOAP Server的。

一.SOAP简介

如果你觉得SOAP这个协议很陌生也不奇怪,因为SOAP协议诞生于“遥远”的1998年,2000年才提交到标准化组织。SOAP是一种消息传递协议规范,用于在计算机网络的Web服务中实现交换结构化信息。其目的是促进可扩展性、中立性和独立性。它使用XML作为承载消息的格式,并依赖于应用层协议,通常是HTTP或SMTP(简单邮件传输协议),用于消息协商和传输。经过若干年的演进,其主要binding的协议是http,其支持SMTP Binding已经极少有应用了。现在,我们可以不严谨的说,SOAP可以理解为“xml over http”。并且从SOAP Body的形式来看,SOAP也像是一种使用XML作为序列化编码格式的RPC调用。

SOAP目前存在两个版本:1.1和1.2版本。一些比较old的SOAP服务仅支持1.1版本,而一些新的SOAP服务则两个版本都支持。

下面是SOAP协议的通用结构:

d6e8183615dc813f0ca0d8c0c4bb0020.png

基于这个结构,我们看看SOAP(over http)的Request和Response的样子:

5d47e515bebe4c4ad88f1ce6edb44d59.png

ec04a3c890ff88209fc0e3b73a901a50.png

关于SOAP协议的更多细节,可以参见SOAP协议规范,这里限于篇幅就不细说了。

二.环境准备

本文中使用的Go语言版本为go 1.11.2。

  1. 获取wsdl文件

现在在互联网上要找到一个面向公共的、免费的SOAP服务着实困难。free-web-services.com上的很多服务已经不提供SOAP服务了,并且多数提供SOAP的服务也已经打不开页面了。在本文中,我们将使用www.dneonline.com/calculator.asmx这个calculator服务,至少目前它还是ready的(不过也不保证它在将来能一直ready)。

我们可以通过下面命令获得这个calculator服务的WSDL文件。

$cd /Users/tony/go/src/github.com/bigwhite/experiments/go-soap/pkg



$curl http://www.dneonline.com/calculator.asmx\?WSDL > calculator.wsdl



$cat calculator.wsdl



<?xml version="1.0" encoding="utf-8"?>

l:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapen
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值