首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用PHP的SoapClient类使用有状态Web服务?

如何使用PHP的SoapClient类使用有状态Web服务?
EN

Stack Overflow用户
提问于 2011-01-11 13:59:36
回答 3查看 4.6K关注 0票数 5

努布问题。

我正在开发一个使用有状态Web服务的PHP网站。基本上,我的网站的“控制流程”如下:

parameters.

  • The
  1. 向用户显示一个页面。
  2. 用户执行一个操作。Web站点的服务器向Web发出请求,在Web服务服务器执行请求时使用用户输入,并在执行过程中从状态A转到状态B。Web站点的服务器将用户重定向到另一个页面,我们回到步骤1。

G 211

我的问题是,Web站点在请求之间丢失了Web服务的状态。如何使网站跟踪Web服务的状态?我使用的是PHP的标准SoapClient类。

我尝试将SoapClient对象序列化为会话变量:

代码语言:javascript
运行
AI代码解释
复制
# ws_client.php
<?php
function get_client()
{
    if (!isset($_SESSION['client']))
        $_SESSION['client'] = new SoapClient('http://mydomain/MyWS/MyWS.asmx?WSDL', 'r');
    return $_SESSION['client'];
}
function some_request($input1, $input2)
{
    $client = get_client();
    $params = new stdClass();
    $params['input1'] = $input1;
    $params['input2'] = $input2;
    return $client->SomeRequest($params)->SomeRequestResult;
}
function stateful_request($input)
{
    $client = get_client();
    $params = new stdClass();
    $params['input'] = $input;
    return $client->StatefulRequest($params)->StatefulRequestResult;
}
?>

# page1.php
<?php
session_start();
$_SESSION['A'] = some_request($_POST['input1'], $_POST['input2']);
session_write_close();
header('Location: page2.php');
?>

# page2.php
<?php
session_start();
echo $_SESSION['A']; // works correctly
echo stateful_request($_SESSION['A']); // fails
session_write_close();
?>

但不起作用。我的密码怎么了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-01-11 14:04:39

您需要使用http://php.net/manual/en/soapclient.getlastresponseheaders.php查找服务器重新生成的" set - cookie“报头,然后在发送后续请求时使用http://php.net/manual/en/soapclient.setcookie.php设置该cookie。对不起,由于我不知道任何PHP,所以不能编写示例代码。

票数 2
EN

Stack Overflow用户

发布于 2012-04-13 02:26:44

为了使用有状态web服务,您需要在客户端的SOAP cookie中设置服务器会话的会话ID。默认情况下,每次发送SOAP请求时,服务器都会生成一个唯一的会话ID。该cookie将与所有后续soap调用一起发送。FOr示例如果您正在使用SOAP使用ASP.net get服务,那么在第一个WS调用之后,获得如下所示的响应头:

代码语言:javascript
运行
AI代码解释
复制
$client = SoapClient("some.wsdl", array('trace' => 1));
$result = $client->SomeFunction();
$headers = $client->__getLastResponseHeaders();

现在,$headers必须包含名为“ASP.NET_SessionId”的会话ID。从$headers获取ID并创建一个cookie,如下所示:

代码语言:javascript
运行
AI代码解释
复制
//$client->__setCookie($cookieName, $cookieValue);
$client->__setCookie('ASP.NET_SessionId', $cookieValue);

现在,来自客户端的所有SOAP请求都将包含这个会话ID,并且您的状态将在服务器上保持不变。

票数 1
EN

Stack Overflow用户

发布于 2013-01-21 02:29:03

还可以通过访问$my_soapclient->_cookie直接从soap客户端获取cookie,因此不必手动解析响应头。

见此处:Reading the Set-Cookie instructions in an HTTP Response header

但是php手册中没有这方面的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4663112

复制
相关文章
git命令中带有特殊符号如@
使用带用户密码clone的方式: git clone https://username:password@remote 当username和password中含有特殊符号会导致出错, 因为为http的请求,所以需要将特殊符号encode成url格式的 java使用: String c = java.net.URLEncoder.encode(".","utf-8"); System.out.println(c); 源文档 <http://blog.csdn.net/qq1142003960/article/
千往
2018/01/24
2.1K0
使用 Git 存储大文件
当在 Git 仓库中存储大的二进制文件时(>50MB),比如 R 里面的 RData 或 RDS 文件,默认的 git 提交方式无法获取二进制文件的修改,会让仓库越来越大。在这种情况下,将仓库 push 到远程会出现警告。
王诗翔呀
2022/01/21
3K0
使用 Git 存储大文件
Jenkins 同步 Bitbucket 代码到 GitHub 中
最近我们团队需要将一些示例和例子从内部的 Bitbucket 同步到 GitHub。我了解 GitHub 可以创建公共的或是私人的仓库,但我们需要保持以下两点
Peter Shen
2020/06/12
1.6K0
Jenkins 同步 Bitbucket 代码到 GitHub 中
如何在环境中存储配置
关于「在环境中存储配置」,是 The Twelve-Factor App 倡导的方法论之一。通常,应用的配置在不同环境(预发布、生产环境、开发环境等等)间会有很大差异,比如说数据库的用户名密码等等配置,通过把配置和代码分离,我们可以保证部署在不同环境的代码完全一致,如何把配置和代码分离呢?最佳实战是把配置存储到环境变量中,它可以非常方便地在不同的部署间做修改,却不动一行代码;与配置文件不同,不小心把它们签入代码库的概率微乎其微;此外环境变量与语言和系统无关。
LA0WAN9
2021/12/14
1.2K0
Rails存储库从SVN转向Git
在Ruby on Rails 2.1版本发布的前夕,Rails开发团队也准备将代码的存储库从Subversion迁移到Git之上。在Ruby on Rails的官方博客里,DHH写到: 我们准备将Rails开发的代码存储库从Subversion迁移到Git之上,迁移过程将会在近期内完成。并且会使用Github来帮助开发者进行协作。在版本存储库迁移的同时,我们也会将问题跟踪系统转移到基于Rails开发的Lighthouse应用之上,于是到目前为止,我们的存储库和问题跟踪系统都是使用的Rails应用,这对我们
用户1172164
2018/01/16
1.4K0
如何在 CentOS 上启用EPEL存储库
EPEL(Extra Packages for Enterprise Linux)存储库提供了标准 Red Hat 和 CentOS 存储库中未包含的其他软件包。EPEL 存储库的创建是因为 Fedora 贡献者希望使用他们在 Red Hat Enterprise Linux(RHEL)及其衍生产品(如CentOS,Oracle Linux和Scientific Linux)上维护的软件包。
用户8705033
2021/06/08
1.9K0
如何在 Git 中取消暂存文件?
在使用Git进行版本控制时,我们经常需要将文件添加到暂存区(stage)以便提交更改。但有时候我们可能会错误地将文件添加到暂存区,或者改变了对文件的修改意图,这时候我们需要取消暂存并将文件从暂存区移除。本文将详细介绍如何在Git中取消暂存文件的方法,以帮助您管理版本控制过程中的文件更改。
网络技术联盟站
2023/06/17
2.8K0
如何在 Git 中取消暂存文件?
如何在git中创建新分支
介绍 Git 是一个开源版本控制系统,用于在软件开发过程中跟踪更改。它的相互独立的分支模型使其脱颖而出。分支可以基于以前版本的软件来保持当前进度的完整性,同时处理错误修复或新功能。 在本地创建 Git 存储库 要创建新的 Git 存储库,请在终端中输入以下命令: mkdir rumenz cd rumenz git init 这将在 rumenz 目录中创建并初始化一个新的 Git 存储库。创建一个新的降价文件并添加一行文本: echo This is a line of text > rumenz.md
入门笔记
2022/06/02
2.9K0
如何在 Fedora、RHEL、AlmaLinux、Rocky Linux 中启用 RPM Fusion 存储库?
RPM Fusion 是一个非官方的软件存储库,提供了许多额外的软件包,使得在 Fedora、RHEL、AlmaLinux 和 Rocky Linux 等发行版中安装第三方软件变得更加方便。在本文中,我们将详细介绍如何在这些操作系统中启用 RPM Fusion 存储库,并说明如何安装常见的第三方软件。
网络技术联盟站
2023/06/09
2.1K1
如何在 Fedora、RHEL、AlmaLinux、Rocky Linux 中启用 RPM Fusion 存储库?
如何安装Git并克隆GitHub存储库
GitHub是一个允许开发人员使用Git版本控制系统进行协作的网站。通过Git和GitHub,来自世界各地的程序员可以在有组织的最新流程中分享想法和代码。
Techeek
2018/09/13
4.1K0
如何安装Git并克隆GitHub存储库
Git连接远程仓库显示找不到存储库
今天在公司上传部分代码到GitHub远程库,结果无法push,Git报错信息显示找不到存储库 $ git push origin master ERROR: Repository not found. fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. 报错信息显示无法从远程库读取 需要保证我有正确的访问权限
框架师
2021/03/05
3.9K0
使用CSI和Kubernetes动态扩展存储卷
Kubernetes本身有一个非常强大的存储子系统,涵盖了相当广泛的用例。然而,当计划使用Kubernetes构建产品级关系型数据库平台时,我们面临一个巨大的挑战:存储。 本文介绍如何扩展最新的Container Storage Interface 0.2.0并与Kubernetes集成,演示动态扩展存储卷容量的基本。
CNCF
2019/12/05
1.1K0
实践: 使用共享库扩展Jenkinsfile
共享库这并不是一个全新的概念,其实具有编程能力的同学应该清楚一些。例如在编程语言Python中,我们可以将Python代码写到一个文件中,当代码数量增加,我们可以将代码打包成模块然后再以import的方式使用此模块中的方法。
DevOps云学堂
2020/02/19
2.1K0
如何在Python中扩展LSTM网络的数据
您的序列预测问题的数据可能需要在训练神经网络时进行缩放,例如LSTM递归神经网络。 当网络适合具有一定范围值(例如10s到100s的数量)的非标度数据时,大量的输入可能会降低网络的学习和收敛速度,并
AiTechYun
2018/03/02
4.1K0
如何在Python中扩展LSTM网络的数据
如何在CVM实例中访问对象存储
对象存储服务与客户的VPC打通,需要客户先确认在哪个子网中使用。由腾讯云工程师进行网络配置,会在客户指定的子网中配置一个vip并与对象存储打通并映射。
本地专用集群CDC
2023/04/21
3.4K0
Jenkins 与 Bitbucket webhook 的配置和使用
在做 Jenkins 与 Bitbucket 的集成时,需要安装插件:Bitbucket Branch Source,可以通过该插件在 Jenkins 里进行 webhook 的配置。这种方式对于没有 Bitbucket 仓库的管理权限,CI/CD 暂且处于变更比较频繁的阶段,不想麻烦的去申请添加 webhook 的同学来说是非常友好的。即可以不用通过管理员在 Bitbucket 设置里添加 webhook 也可以实现创建 PR 后触发 Jenkins 构建。
Peter Shen
2020/06/12
4.3K0
Jenkins 与 Bitbucket webhook 的配置和使用
如何在 Spring Boot 使用 Dubbo Activate 扩展点
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢!
二哥聊运营工具
2021/12/17
6470
点击加载更多

相似问题

是否可以使用.net核心编写soap服务?

27

.NET 5.0和SOAP服务

11

Pythonnet是否支持.NET核心或.NET 5.0?

13

如何使用Jmeter5.0测试SOAP 5.0服务

10

是否可以使用.NET核心创建图表

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文