- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 native SoapServer 类在 PHP 中创建一个简单的 SOAP 网络服务:http://www.php.net/manual/en/class.soapserver.php
但是,关于此类的文档非常少,我不知道如何创建一个服务器,只是一个客户端。任何人都可以提供一些 tuts 或示例代码吗?
最佳答案
我也一直在努力解决这个问题,尤其是获得适用于 .Net 客户端的代码。我找到了适用于 PHP 客户端的示例,但当我尝试从 .Net 客户端调用服务时,这些示例通常会失败。我仍在为此苦苦挣扎,因此我的这个问题寻求帮助一个返回字符串值的简单 PHP SoapServer 示例:
String values returned by PHP SoapServer not received by .Net client
但是,虽然我无法让这个基本示例正常工作,但我已经设法让一个返回自定义对象数组的示例正常工作,所以我将在这里分享这个示例,希望它对其他人有所帮助。此示例定义了一个单独的操作 getUsers,它采用一个 string 参数 message,只是为了演示消息传递。此操作返回一组 User 对象。 User 对象还有一个字段 message,我在其中将接收到的值传回服务,仅用于测试目的。我将发布完整的示例; wsdl文档、PHP服务器代码和C#客户端代码。
WSDL 文档
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/"
xmlns:tns="http://test-uri/soap/export/"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
xmlns:http="http://schemas.xmlsoap.org/wsdl/http/"
targetNamespace="http://test-uri/soap/export/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
<wsdl:types>
<s:schema targetNamespace="http://test-uri/soap/export/" elementFormDefault="qualified">
<s:import namespace="http://microsoft.com/wsdl/types/"/>
<s:element name="getUsers">
<s:complexType>
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="message" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="getUsersResponse">
<s:complexType>
<s:sequence>
<s:element name="getUsersArray" type="tns:getUsersArray"/>
</s:sequence>
</s:complexType>
</s:element>
<s:complexType name="getUsersArray">
<s:sequence>
<s:element minOccurs="0" maxOccurs="unbounded" name="User" nillable="true" type="tns:User" />
</s:sequence>
</s:complexType>
<s:complexType name="User">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="id" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="firstname" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="surname" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="message" type="s:string"/>
</s:sequence>
</s:complexType>
</s:schema>
</wsdl:types>
<wsdl:message name="getUsersSoapIn">
<wsdl:part name="parameters" element="tns:getUsers"/>
</wsdl:message>
<wsdl:message name="getUsersSoapOut">
<wsdl:part name="parameters" element="tns:getUsersResponse"/>
</wsdl:message>
<wsdl:portType name="TestSoap">
<wsdl:operation name="getUsers">
<wsdl:documentation xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'>
Function ("getUsers")
</wsdl:documentation>
<wsdl:input message="tns:getUsersSoapIn"/>
<wsdl:output message="tns:getUsersSoapOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="TestSoap12">
<wsdl:operation name="getUsers">
<wsdl:documentation xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'>
Function ("getUsers")
</wsdl:documentation>
<wsdl:input message="tns:getUsersSoapIn"/>
<wsdl:output message="tns:getUsersSoapOut"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="TestSoap" type="tns:TestSoap">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getUsers">
<soap:operation soapAction="http://test-uri/soap/export/getUsers" style="document"/>
<wsdl:input>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:binding name="TestSoap12" type="tns:TestSoap12">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getUsers">
<soap12:operation soapAction="http://test-uri/soap/export/getUsers" style="document"/>
<wsdl:input>
<soap12:body use="literal"/>
</wsdl:input>
<wsdl:output>
<soap12:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="TestService">
<wsdl:port name="TestPort" binding="tns:TestSoap">
<soap:address location="http://url/to/test_server.php"/>
</wsdl:port>
<wsdl:port name="TestSoap12" binding="tns:TestSoap12">
<soap12:address location="http://url/to/test_server.php"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
PHP 服务器代码
<?php
function getUsers($args) {
$args = (array)$args;
return array("getUsersArray" => array(
array("id"=>"1",
"firstname"=>"Barney",
"surname"=>"Rubble",
"message"=>$args["message"]),
array("id"=>"2",
"firstname"=>"Fred",
"surname"=>"Flintstone",
"message"=>$args["message"])
)
);
}
ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
$server = new SoapServer("test.wsdl");
$server->addFunction("getUsers");
try {
$server->handle();
}
catch (Exception $e) {
$server->fault('Sender', $e->getMessage());
}
?>
C# 客户端代码
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
WebReference.TestService srv = new WebReference.TestService();
WebReference.User[] users = srv.getUsers("says hello");
foreach (WebReference.User user in users)
{
MessageBox.Show(user.firstname+" "+user.message);
}
}
}
}
就是这样。我希望这个示例对其他人有用,并为他们节省我为此花费的时间!!
关于PHP 5 SoapServer 用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7748753/
是否可以将 Delphi SoapServer 应用程序转换为使用 TCP/IP? 最佳答案 从您的评论到您的问题,听起来您正在寻找摆脱 SOAP,并使用其他东西通过 TCP/IP 连接进行通信。 可
我已经在其他地方看到这个问题的答案,但我仍然无法解决这个问题,所以我需要进一步说明: 给出的例子是: $tag['_'] = 'yyy'; $tag['attr'] = 'xxx'; $tagVar
我正在使用 PHP 的 SoapServer 类构建 Web 服务。使用 classmap 功能效果很好,并且 WSDL 类型正确映射到 PHP 类型。但是,我无法弄清楚映射类的实例是如何创建的。 有
我正在使用 PHP 中的 SoapServer 开发网络服务。以前,我使用完全相同的技术制作了另一个网络服务。我的新项目在同一台服务器上,但在另一个子目录中。在服务和 soapserver 的 url
我想发送一个纯 xml 的 soap 响应,即没有 soap 信封。这是我目前的回应 false
我正在阅读 php 类 SoapServer 的文档,但没有找到任何关于将在 SoapServer 构造函数中传递的选项的描述: 还有一个功能选项可以设置为 SOAP_WAIT_ONE_WAY_CAL
与编写DataSnap相比,使用DataSnap有哪些优势?肥皂服务器应用程序。 我知道Datasnap 可以使用TCP/IP 代替soap。 问候 桑迪普 最佳答案 使用 DataSnap,您可以导
是否有任何/所有异常是 PHP SoapServer可能会在任何地方记录下来? (意味着构建的是 SoapServer 的 native PHP 实现,而不是基于第三方 PHP 的实现) 如果不是,是
我正在尝试使用 native SoapServer 类在 PHP 中创建一个简单的 SOAP 网络服务:http://www.php.net/manual/en/class.soapserver.ph
我正在尝试在代理后面同时运行 PHP SoapClient 和 SoapServer(用于 Magento),其中唯一允许通过代理服务器的网络流量。 我已经和客户一起工作了: $client = ne
我需要在 Soap 响应中添加一个命名空间。我正在使用 php 和 SoapServer。我的回答是这样开始的: 我需要它像这样开始: 我在PHP中的代码是这样的,我不知道如何继续: class
我正在创建一个 SOAP 服务器(在 Symfony 中使用 ckWebservicePlugin),它需要符合以下请求和响应结构(我得到的是一个已经商定的规范)。 请求:
我有一个基于 symfony 的产品,我必须在其中公开一个 Soap API。我已经创建了 wsdl 文件,在输入用户名和密码进行基本的 http 身份验证检查后,可以从浏览器访问该文件。 当我使用
所以错误是: PHP fatal error :过程“sup:set_availability”不存在于 XMLSoapServer.php 中 我在我的开发环境 (MAMP) 上收到此错误。 这是由
我正在设置一个 SOAP 网络服务,它接受 XML 输入并且必须返回自定义 XML 输出。所有这些都在 WSDL 中定义。我为此应用了 soapServer(直到有人说它有错误阻止我实现我的目标:-)
我正在设置一个 SOAP 网络服务,它应该返回一个复合消息。 此消息的有效实例如下: x1 w1
我使用 PHP 5.3 创建了一个基于 WSDL 的 SOAP Web 服务。我使用 Zend Framework 来处理服务,而 ZF 又位于 PHP 的内置 SoapServer 类之上。 在使用
我们已经构建了一个 SOAP 服务来接收请求,但是给出的响应需要包含一个附加值,我们不知道如何添加它。 我们需要添加 xmlns="http://some-url.co.uk/"进入这个: 所以它读
在“创建服务端”方面,我对 Soap 比较陌生,所以对于我正在使用的任何术语,请提前表示歉意。 是否可以从使用 PHP 的 SoapServer 类设置的远程过程 Soap 服务返回 PHP 数组?
我有一个由 java 中的网络服务生成的 WSDL,我需要在 php 应用程序中复制相同的网络服务。 我看了看,我发现的大多数脚本都只是生成客户端。我需要将被消耗的服务器端。 最佳答案 如果您有 WS
我是一名优秀的程序员,十分优秀!