我正在编写一个PHP应用程序,它使用许多SOAP Web服务来收集数据.

我在实例化所有这些对象时会遇到很大的开销:在某些情况下,单行代码$object = new SoapClient($wsdl);可能需要三秒钟.显然,只有少数几个使网页感觉非常慢.

为了加快速度,我想我会将对象序列化并将它们存储在会话中(或类似的地方),所以我编写了以下函数:

function soap_client($name,$wsdl) {

if (!isset($_SESSION['soapobjects'][$name])) {

$client = new SoapClient($wsdl, array('trace' => 1));

$_SESSION['soapobjects'][$name]=serialize($client);

} else {

$client = unserialize($_SESSION['soapobjects'][$name]);

}

return $client;

}

……然后像这样称呼它……

$client = soap_client('servicename',$wsdl);

$client->MethodName($parameters);

但是,它似乎不起作用.

第一次运行它时,它可以工作(即创建对象并生成序列化副本,并且方法调用正常).但是,第二次运行它时,它会失败.

该对象似乎正确序列化和反序列化,但是当您尝试对反序列化对象执行SOAP调用时,它会引发以下错误:

Fatal error: Uncaught SoapFault exception: [Client] Error finding "uri" property

显然,反序列化对象与原始对象不同,这与对象序列化应该如何工作不一致.

谁能解释为什么我收到这个错误?你能建议一种让它运作的方法,或者我可以追求的另一种策略吗?

谢谢.

ps – 我试图解决这个问题,但没有快乐.

我已经尝试在options参数中指定URI(如PHP SOAP Client manual中所指定的),但它没有任何区别.但是无论如何它都不是必需的,因为我正在使用WSDL.

我也试过简单地将对象复制到$_SESSION,而不使用serialize()和deserialize(),但这具有完全相同的效果.

解决方法:

内置的SOAP扩展是一个不可判坏的二进制blob.很可能它并没有考虑到序列化.例如,它可能包含一个内部文件句柄,它不会在序列化/反序列化过程中存活.我建议你使用其他一些SOAP客户端,例如:

> Zend_Soap,Zend Framework的一部分.您不需要在代码的任何其他区域使用Framework,并且可能删除大多数其他组件.但是,它似乎在封面下使用现有的SOAP扩展,因此它可能不适合序列化.

> PEAR’s SOAP经常被引用,虽然它有点旧.

> NuSOAP最近已经从死里复活,尽管所有在线文档似乎已经消失在zip文件中.

如果这些都不合适,请考虑在本地缓存WSDL文件,因为我不知何故预计延迟就在哪里.来源:https://www.icode9.com/content-1-255701.html

php soapclient 参数,序列化 – 序列化PHP SOAPClient对象相关推荐

  1. Winform中实现序列化指定类型的对象到指定的Xml文件和从指定的Xml文件中反序列化指定类型的对象

    场景 在Winform程序中需要将某些页面的设置存储到配置文件中,下次再次打开时通过配置文件读取,点击确定时能将将设置保存到配置文件中. 之前介绍过 Winform中自定义xml配置文件后对节点进行读 ...

  2. android 序列化传参数,Android序列化之Parcelable和Serializable的使用详解

    序列化与反序列 首先来了解一下序列化与反序列化. 序列化 由于存在于内存中的对象都是暂时的,无法长期驻存,为了把对象的状态保持下来,这时需要把对象写入到磁盘或者其他介质中,这个过程就叫做序列化. 反序 ...

  3. php serialize参数,PHP 序列化(serialize)格式详解

    PHP 序列化(serialize)格式详解 1.前言 PHP (从 PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不过在 PHP 手 ...

  4. java 属性不序列化_怎样对带有不可序列化属性的Java对象进行序列化

    原标题:怎样对带有不可序列化属性的Java对象进行序列化 出于很多原因我们想使用自定义的序列化方法取代Java默认的机制.一个最常见的原因是提高性能,而另一个原因是有时候我们无法使用默认的序列化方法. ...

  5. java流的序列化_Java中的对象流和序列化介绍

    最近,在讲流的使用,其中对象流的作用其实就是将自定义类的对象与流之间相互转换的流. 看起来还是挺简单的,那么看下面的例子: public class Student{ private int id; ...

  6. java中的IO流之序列化与反序列化(对象数据和文件的读写交互)

    前言必读 读者手册(必读)_云边的快乐猫的博客-CSDN博客 一.知识点介绍 1.什么是序列化与反序列化? 对象与磁盘的交互读写. 2.为什么要学? 2.1在之前的IO流中,都是内存与磁盘进行交互的读 ...

  7. php soapclient 参数,PHP SoapClient参数问题

    使用SOapUi软件测试可以传输成功.使用PHP SoapClient参数传不过去,帮忙看看调用TransDIYOrderInfoToGVS函数该如何传参 WSDL array(1) { [0]=&g ...

  8. java分布式对象——远程方法中的参数和返回值+远程对象激活

    [0]README 1)本文文字描述转自 core java volume 2, 旨在学习 java分布式对象--远程方法中的参数和返回值+远程对象激活 的相关知识: [1]远程方法中的参数和返回值 ...

  9. 什么是序列化? 如何实现(反)序列化 序列化的应用

    1. 什么是序列化与反序列化,什么情况需要序列化 1.1 序列化 序列化是什么 序列化的目的 什么情况需要序列化 1.2 反序列化 反序列化是什么 反序列化的目的 2. Java中的序列化与反序列化 ...

  10. 序列化-序列化的嵌套

    class Merchant(models.Model):"""商家"""name = models.CharField(max_lengt ...

最新文章

  1. TVM: Deep Learning模型的优化编译器(强烈推荐, 附踩坑记录)
  2. listview 滑动更改标题
  3. .Net Framework 4.0 中利用Task实现并行处理、串并行混合处理
  4. Webpack 常用命令总结以及常用打包压缩方法
  5. Pycharm运行项目代码时输入可选参数
  6. 常用cmd命令(持续更新)
  7. 八段锦八个动作名称_【健康养生】道家养生八段锦详细动作演示——教学版
  8. 什么是NoSQL及NoSQL四大分类
  9. 【读书笔记】Head First设计模式-设计模式入门-鸭子会不会飞(1)
  10. 程序猿DD《Spring Boot基础教程》系列汇总
  11. 【BZOJ】3993: [SDOI2015]星际战争
  12. Oracle的异构数据迁移工具 - OMW及ODI
  13. 欢迎大家加入我的Q群
  14. (4) epics 中新建一个ioc的整体过程
  15. 【Python】 -- from module import * 、from module import function 与 import module
  16. 服务器 12 种基本故障+排查方法
  17. 【已解决】MATLAB未定义函数或变量 ‘wavread‘,以及audioread,audiowrite,wavwrite
  18. 解决CentOS下boost安装后不能使用的问题
  19. 建模笔记——熵值法熵权法(python)
  20. 网络游戏运营的整体流程

热门文章

  1. 【汇编语言】寄存器和地址
  2. 20221014 芯片封装介绍
  3. matlab 实现脉冲信号、阶跃信号和斜坡信号
  4. 【Android音视频开发】【013】SurfaceView生命周期
  5. JTAG 学习 -SVF格式
  6. 收藏:3G手机的市场调研报告
  7. Android SurfaceView 初识
  8. XLM:Cross-lingual Language Model Pretraining(2019-1-22)
  9. 基于招聘网站的大数据专业相关招聘信息建模与可视化分析
  10. ubuntu下jrtplib的安装和使用