65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 PHP/C# 开发 SOAP Web 服务

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.75/5 (12投票s)

2010 年 5 月 28 日

CPOL

7分钟阅读

viewsIcon

122836

downloadIcon

10909

讨论使用 C# 开发 PHP/SOAP Web 服务及其实现。

引言

本次研究的目标是

  1. 了解什么是 Web 服务。
  2. 了解什么是 SOAP。
  3. 学习如何从 PHP 网站和 Windows 桌面应用程序中消费 PHP/SOAP Web 服务。

1.0 什么是 Web 服务?

W3C 将 Web 服务定义为“一个旨在支持网络上可互操作的机器对机器交互的软件系统”。Web 服务通常只是可以通过网络(例如 Internet)访问的 Internet 应用程序编程接口 (API)。

Web 服务只是两个机器在本地或广域网(如 Internet)上进行通信的标准方式,无论主机平台或软件语言如何。Web 服务是一组 API,以标准化的方式向客户端应用程序提供数据。这些数据可以通过结合(通常)HTTP、支持的超文本处理器(如 PHP)和 SOAP 等通信协议在网络上传输。

2.0 什么是 SOAP?

SOAP 是一种在客户端-服务器配置中,在两台机器之间传输数据的标准化方法。SOAP 是 W3C 标准化的(W3C, 2004)一种在网络(本地或 Internet)上与 Web 服务通信的方式。“SOAP 是一种基于 XML 的消息协议。”

SOAP 消息(信封)以 XML 格式构成,XML 本身是 W3C 的开放标准。客户端必须有一个 XML 解析器来解释文档。XML 是平台和编程语言无关的,因此可以被广泛的计算机系统使用。由于 SOAP 只是一种标准而不是一种进程,因此它不限于任何特定的协议(尽管 HTTP 是常见的)。

2.1 SOAP 信封

SOAP 信封是一个在客户端和服务器之间发送的 XML 文档,其中包含请求/响应数据。该文档有三个主要元素(w3schools, 2009)

  • 信封
  • 包含方案和编码数据。

  • 标题
  • 包含 ID、源、目标数据。

  • 正文
  • 包含请求/响应数据(Silver Spoon Sokpop, 2009)。

SOAP 实现(如 NuSOAP)的主要目标之一是封装创建 SOAP 信封的过程,以确保与 SOAP 规范的兼容性和合规性。

2.2 什么是 WSDL?为什么它对 SOAP/Web 服务很重要?

WSDL 是一个用 XML 编写的文档。该文档描述了一个 Web 服务。它指定了服务的位置以及服务公开的操作(或方法)。

WSDL(Web 服务描述语言)向客户端定义了 Web 服务和可用方法。这适用于所有从任何上下文中消费该应用程序的客户端。

WSDL 文档还定义了以下内容

  • 方法参数
  • 参数数据类型
  • 返回值数据类型
  • 端口和绑定数据

WSDL 文档的示例结构

<definitions>
  <types>
definition of types
</types>
  <message>
definition of a message
</message> 
   <portType>
definition of a port
</portType>
   <binding>
definition of a binding
</binding> </definitions>

2.3 什么是 NuSOAP?

最可行的 PHP SOAP 实现似乎是 Dietrich Ayala 的 SOAPx4,也称为 NuSOAP(Apple Inc, 09)。

NuSOAP 是一组类,可用于快速开发支持 SOAP 的 PHP Web 服务。NuSOAP 本身不是一种技术,因为它不需要服务器进行任何重新配置,而是充当中间人,简化应用程序开发过程。

<?php
// Pull in the NuSOAP code
require_once('nusoap.php');
// Create the server instance
$server = new soap_server;
// Register the method to expose
$server->register('hello');
// Define the method as a PHP function
function hello($name) {
    return 'Hello, ' . $name;
}
// Use the request to (try to) invoke the service
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

上面的示例演示了一个 NuSOAP 服务器,它有一个方法,该方法返回传递给它的值(作为字符串)。

演练

  • 引用 NuSOAP 实现。
  • 创建服务器对象的实例,并为其命名。
  • 将“hello”方法注册到服务器对象。
  • 编写相应的方法并让它“做某事”。(在这种情况下,返回与最初传递给它的字符串相同的值。)
  • 如果 [当] 有 POST 数据时,将其传递给服务器对象并对其进行处理。

上面的代码是 NuSOAP 示例中最基本的,但它清楚地展示了在不必编写(甚至完全理解)实现本身的情况下开始使用 SOAP 所需的步骤。

<?php
// Pull in the NuSOAP code
require_once('nusoap.php');
// Create the client instance
$client = new soapclient('https:///phphack/helloworld.php');
// Call the SOAP method
$result = $client->call('hello', array('name' => 'Scott'));
// Display the result
print_r($result);
?>

客户端代码在设计上是相似的。尽管此示例仅使用 PHP,但可以使用几乎任何其他语言来访问服务器。

演练

  • 引用 NuSOAP 实现。
  • 创建 SOAPClient 的实例,并指定 Web 服务的远程路径。
  • 调用所需的方法并传递一个参数(称为 'name')。
  • Web 服务响应(如果请求有效),并将结果打印到屏幕上。

使用第三方实现的一个缺点是调试和错误处理更加困难,因为您不了解底层代码。

3.0 消费 SOAP/PHP Web 服务

消费 SOAP/PHP Web 服务有很多方法。本节仅侧重于通过 Windows Forms (C#) 应用程序消费 Web 服务,尽管任何支持 XML SOAP Web 服务的编程语言都是兼容的。

3.1 Windows Forms 应用程序

Microsoft Visual Studio 对 SOAP/XML Web 服务有广泛的支持。Microsoft .NET Framework(1.1 版及更高版本)有一个内置对象,可以继承该对象,从而无需理解 XML 或读取 XML 文档即可访问 Web 服务。对象:SoapHttpClientProtocol(Microsoft MSDN, 2010)。

3.1.1 如何在 Visual Studio 2008 中消费 Web 服务

连接到 Web 服务

  • 打开 Visual Studio 2008。
  • 创建一个新项目(C# 或 VB.NET,过程相同)。
  • 在解决方案资源管理器中,右键单击“引用”,然后单击“添加 Web 引用”。
  • 键入 Web 服务描述语言 (WSDL) 文档的地址。例如:https:///customerswebservice/index.php?wsdl
  • 单击“转到”。
  • Visual Studio 现在将检索 WSDL 文档并显示可用的方法。
  • 为引用起一个有意义的名称,例如“CustomersLookup”。
  • 单击“添加引用”。

调用服务

  • 转到您的代码,即加载事件。
  • 创建 CustomerLookup 类的新实例(自动为您生成)。
  • CustomersLookup.CustomerLookup cl = new CustomersLookup.CustomerLookup(); 
  • 调用 WSDL 提供的某个方法。
  • Customer[] c = cl.GetAllCustomers();

注意:这是一个示例;您键入的代码取决于您的 Web 服务公开的方法。

4.0 关键分析

本次研究的目标是了解 PHP/SOAP 是什么以及如何从 Windows 桌面应用程序中消费它。为了支持这项研究,已经完成了两个项目。(有关 Web 服务详情,请参阅本文档开头的实现说明)。这些应用程序通过以下方式支持研究:

Web服务

  • Web 服务实现了 NuSOAP,NuSOAP 本身是 SOAP 的一个实现。
  • NuSOAP 是用 PHP 编写的,使用 NuSOAP 实现的代码也是用 PHP 编写的。

桌面应用程序

  • 消费 Web 服务本身的所有功能,并利用通过调用 Web 服务检索到的所有数据。
  • 桌面应用程序使用 WSDL 来描述代码中的类和变量。

桌面应用程序完全实现了 Web 服务。但是,Web 服务可以扩展以提供更多返回简单类型和复杂类型的方法,以及需要简单/复杂类型作为参数。可以通过在 WSDL 中编写更多支持性文档来改进 Web 服务,说明每个方法的作用、所需参数以及返回值。桌面应用程序也可以通过相同的方式进行改进。

Web 服务与开发人员高度相关,因为它为应用程序和服务器之间的通信提供了跨平台/跨浏览器的手段。

使用 Web 服务为应用程序提供数据这一概念,对大多数开发人员都很有用。例如,Web 服务可以用来同步用户所有设备(笔记本电脑、台式机、手机、智能手机)或操作系统(Windows Mobile、Android、Symbian)上的数据。

5.0 参考/书目

历史

© . All rights reserved.