背景:在最近的开发中,为了解决公司内部系统与外部系统的对接,开始接触到了webservice接口,外部公司提供接口供我们调用,已达到数据同步的目的,因此有必要普及一下web service的知识了!

什么是web service:web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记御园下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

webservice三要素:SOAP、WSDL(WebServicesDescriptionLanguage)、UDDI(UniversalDescriptionDiscovery andIntegration)之一, soap用来描述传递信息的格式, WSDL 用来描述如何访问具体的接口, uddi用来管理,分发,查询webService 。具体实现可以搜索 Web Services简单实例 ; SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP使用基于XML的数据结构超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象

什么是SOAP:SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换。

  • SOAP 指简易对象访问协议
  • SOAP 是一种通信协议
  • SOAP 用于应用程序之间的通信
  • SOAP 是一种用于发送消息的格式
  • SOAP 被设计用来通过因特网进行通信
  • SOAP 独立于平台
  • SOAP 独立于语言
  • SOAP 基于 XML
  • SOAP 很简单并可扩展
  • SOAP 允许您绕过防火墙
  • SOAP 将被作为 W3C 标准来发展

HTTP与SOAP

  • 通俗易懂的一种说法(HTTP就是邮局的协议,他们规定了你的信封要怎么写,要贴多少邮票等,SOAP就是你们之间交流的协议,负责把你所需要表达的意思写在信纸上,同时也负责让对方能够看得懂你的信。);
  • 事实上HTTP是SOAP消息的最常见的传输工具。soap将信息进行XML的序列化后,再用http协议的方式再打包进行传送,传送的方式还是tcp或者udp。做个比喻就好理解了。tcp 和 udp 都是公路,暂且把tcp认为是一般公路,udp高速公路,soap和http就都是汽车,那么soap和http都可以在tcp和udp上跑。说soap可以通过http来传送,实际就是说soap是小轿车,http是装轿车的卡车,把soap的信息装到http里面,然后再运输,当然走的道路还是tcp或udp。说soap可以通过http协议来传输,这句话不太准确,比较准确第说法是:soap信息可以通过http协议包装后通过tcp或udp传输。

什么是WSDL:WSDL(网络服务描述语言,Web Services Description Language)是一门基于 XML 的语言,用于描述 Web Services 以及如何对它们进行访问。

  • WSDL 指网络服务描述语言
  • WSDL 使用 XML 编写
  • WSDL 是一种 XML 文档
  • WSDL 用于描述网络服务
  • WSDL 也可用于定位网络服务
  • WSDL 还不是 W3C 标准

什么是UDDI:UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。

  • UDDI 指的是通用描述、发现与集成服务
  • UDDI 是一种用于存储有关 web services 的信息的目录。
  • UDDI 是一种由 WSDL 描述的 web services 界面的目录。
  • UDDI 经由 SOAP 进行通信
  • UDDI 被构建入了微软的 .NET 平台

UDDI基于什么:

  • UDDI 使用 W3C 和 IETF* 的因特网标准,比如 XML、HTTP 和 DNS 协议。
  • UDDI 使用 WSDL 来描述到达 web services 的界面
  • 此外,通过采用 SOAP,还可以实现跨平台的编程特性,大家知道,SOAP 是 XML 的协议通信规范,可在 W3C 的网站找到相关的信息。

PHP创建webservice:

前提:环境要确保PHP支持SOAP;

创建一个.wsdl文件(方式:1、使用zend studio工具直接生成;2、使用SoapDiscovery.class.php自动生成wsdl文件)

  • 定义服务类:Service.php,该服务端就是实现对外提供的接口,比如写一个类(Person.class.php);代码如下:
<?php

/**
* Created by PhpStorm.
* User: 黎志明
* Date: 2018/6/19
* Time: 11:40
*/
class Person
{
public function say()
{
return "我在说话。";
}
public function run()
{
return "我在跑步";
}
}
  • 创建service.php文件,生成.wsdl文件,代码如下:
<?php
/**
* Created by PhpStorm.
* User: 黎志明
* Date: 2018/6/19
* Time: 11:41
*/
include("Person.class.php");
include("SoapDiscovery.class.php");
//第一个参数是类名(生成的wsdl文件就是以它来命名的),即person类,第二个参数是服务的名字(这个可以随便写)。
$disco = new SoapDiscovery('Person', 'Person');
$disco->getWSDL();
  • 浏览器直接访问Service.php,生成Person.wsdl文件
<?xml version="1.0" ?>
<definitions name="Person" targetNamespace="urn:Person" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="urn:Person"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types xmlns="http://schemas.xmlsoap.org/wsdl/"/>
<portType name="PersonPort">
<operation name="say">
<input message="tns:sayRequest"/>
<output message="tns:sayResponse"/>
</operation>
<operation name="run">
<input message="tns:runRequest"/>
<output message="tns:runResponse"/>
</operation>
</portType>
<binding name="PersonBinding" type="tns:PersonPort">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="say">
<soap:operation soapAction="urn:Person#Person#say"/>
<input>
<soap:body use="encoded" namespace="urn:Person"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="urn:Person"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
<operation name="run">
<soap:operation soapAction="urn:Person#Person#run"/>
<input>
<soap:body use="encoded" namespace="urn:Person"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="urn:Person"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="Person">
<documentation/>
<port name="PersonPort" binding="tns:PersonBinding">
<soap:address location="http://localhost:80/wsdl/Service.php"/>
</port>
</service>
<message name="sayRequest">
</message>
<message name="sayResponse">
<part name="say" type="xsd:string"/>
</message>
<message name="runRequest">
</message>
<message name="runResponse">
<part name="run" type="xsd:string"/>
</message>
</definitions>
  • 将Service.php文件的内容清空,把一下代码复制进去:
<?php
/**
* Created by PhpStorm.
* User: 黎志明
* Date: 2018/6/19
* Time: 11:41
*/ include("Person.class.php");
$objSoapServer = new SoapServer("Person.wsdl");//person.wsdl是刚创建的wsdl文件
//$objSoapServer = new SoapServer("server.php?wsdl");//这样也行
$objSoapServer->setClass("Person");//注册person类的所有方法
$objSoapServer->handle();//处理请求
  • 创建webservice客户端程序,测试webservice是否邮箱,文件名为:client.php,代码如下:
<?php
/**
* Created by PhpStorm.
* User: 黎志明
* Date: 2018/6/19
* Time: 11:59
*/
$client = new SoapClient("Person.wsdl");
//$client = new SoapClient("server.php?wsdl");//这样也行
echo $client->say();
echo "<br />";
echo $client->run();
echo "<br />";

  小结:.NET如果要使用的话,只要提供一个url给他就行了;获得url的方法:你可以先到Person.wsdl文件里面查找<soap:address location="http://localhost:80/wsdl/Service.php" />,这里的url(具体url是根据你的目录确定的)就是你要提供给.NET开发人员使用的;不过别高兴太早,后面要加:“?wsdl”,http://localhost:80/wsdl/Service.php?wsdl这样才是对的,不信你可以将url拷贝到浏览器的地址栏里看下就知道了,.NET开发人员获得你给他的url之后,就可以在自己的项目里面添加一个服务引用或者web引用了,然后就可以根据提示完成相关操作,对于使用.NET的开发人员来说很简单的。

PHP webservice初探的更多相关文章

  1. C# webservice初探

    转载请注明出处Coder的不平庸:http://blog.csdn.net/pearyangyang/article/details/46348633 因为工作的终端曾经是直接对数据库进行操作,导致每 ...

  2. 第一篇:webservice初探

    接触webservice也有一段时间了,为了查缺补漏,把知识点系统化,准备写几篇博文梳理下webservice的知识点,这是第一篇,对webservice进行大致的介绍. 1.什么是webservic ...

  3. 初探WebService

    写博客也是一件非常费时的事儿啊,之前配置服务器和客户端的Oracle数据库搞了很久,搞定之后懒的记录,现在想想如果让我再配一次,估计又要花很长时间了. 所以把做过的东西整理整理记录下来还是很有必要的, ...

  4. Java WebService Axis 初探

    最近在学习WebService 开始了: 一:服务端的编写与发布 1. 工具准备: java的开发环境(这里就不多说了).   axis2官网上下载最新的就可以了(我这里用的是axis2-1.4.1- ...

  5. 构建安全的Xml Web Service系列之初探使用Soap头

    原文:构建安全的Xml Web Service系列之初探使用Soap头 Xml Web Service 从诞生那天就说自己都么都么好,还津津乐道的说internet也会因此而进入一个新纪元,可5年多来 ...

  6. 《ASP.NET MVC 5 破境之道》:第一境 ASP.Net MVC5项目初探 — 第三节:View层简单改造

    第一境 ASP.Net MVC5项目初探 — 第三节:View层简单改造 MVC默认模板的视觉设计从MVC1到MVC3都没有改变,比较陈旧了:在MVC4中做了升级,好看些,在不同的分辨率下,也能工作得 ...

  7. webService

    什么是webService WebService,顾名思义就是基于Web的服务.它使用Web(HTTP)方式,接收和响应外部系统的某种请求.从而实现远程调用.  1:从WebService的工作模式上 ...

  8. 开始webservice了

    一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...

  9. Spring WebService入门

    Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布 ...

随机推荐

  1. 文件路径、File协议、FTP协议、Http协议之间简单的区别

    File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样,基本的格式如下:file:///文件路径. FTP是文件传输协议,可以用于互联网上.例如,你有一个网站,放在 ...

  2. Creating SSL Certificates for CRM Test Environment

    不必找第三方去申请证书了, Windows Server 自己也可以作为一个CA的. When working on a CRM Test environment there are many sce ...

  3. 手把手教你开发jquery插件

    I have said that i dislike jQuery UI’s unified API, so i want to get the instance of the component a ...

  4. 12月12日 has_many through:的interference, option

    has_many :products, through: :cart_items, source: :product build定义:collection.build(attributes = {}, ...

  5. nyoj737石子合并(一)

    先得出区间为1和2时的结果.用arr[i][j]记录i,j内的和.dp[i][j]记录i,j区间全加起来的最小花费.那么区间大小为1和2时都是明显的.为3时枚举断点.其中一个区间大小为1也是可行的. ...

  6. Confluence 6 使用 LDAP 授权连接一个内部目录概述

    你可以为你的 Confluence 连接 LDAP 服务器使用使用委托认证.这个意思是 Confluence 将会设置一个内部目录,这个目录仅被用来处理 LDAP 的授权. 这个设置将会为尝试登录系统 ...

  7. nyoj1248(阅读理解???)

    海岛争霸 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比海盗,你知道吧?杰克船长驾驶着自己 ...

  8. UVA-1626 Brackets sequence (简单区间DP)

    题目大意:给一个有小括号和中括号组成的序列,满足题中的三个条件时,是合法的.不满足时是不合法的,问将一个不合法的序列最少添加几个括号可以使之变成合法的.输出最短合法序列. 题目分析:这是<入门经 ...

  9. Leetcode 22

    //这题感觉不如前两题回溯清楚,还要再看看class Solution { public: vector<string> generateParenthesis(int n) { vect ...

  10. react项目打包后路径找不到,项目打开后页面空白的问题

    使用 npm install -g create-react-app快速生成项目脚手架打包后出现资源找不到的路径问题: 解决办法:在package.json设置homepage