我对 PHP Soap 相当陌生,但我相信我已经掌握了它。我的问题很奇怪,我已经在我的 Apache/cent OS 服务器上安装了 soap-php 模块。玩了一段时间后,我能够连接到公共 Web 服务并将其与 PHP 方法一起使用(使用 SoapClient())所以我不认为这是配置错误。
当我尝试连接到我想使用的 Web 服务时,该服务托管在本地服务器上。连接立即重置,我尝试使用的 Web 服务没有任何响应。
我试图自己解决这个问题,但在检查其他内容方面遇到了僵局。
我知道 WSDL 在那里并且可以访问,因为当我将 URL 放入浏览器时,我可以看到它。我知道这项服务正在运行,因为它正在被其他应用程序使用。
我认为这不是 PHP/Apache 设置问题,因为我可以连接到其他 Web 服务并访问其中的方法。
但是,当我将我的测试应用程序指向我想要使用的服务时。我立即得到“连接已重置”。我使用了http siffer,我可以看到我试图访问的机器根本没有响应,就好像它不存在一样。以下是嗅探器日志。
客户端-> 服务器 192.168.1.190 -> 74.xxx.xxx.xxx
GET /contact/pipeline/bettertest.php HTTP/1.1 主机:www.harms-software.com 用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1 接受:文本/html,application/xhtml+xml,application/xml;q=0.9, / ;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate 连接: keep-alive Cookie: userinfo =XXXXXX%2CAdmin; __utma=266616727.1802384666.1343229893.1346876009.1346935926.113; __utmz=266616727.1346763531.101.17.utmcsr=millenniumcentral.com|utmccn=(推荐)|utmcmd=推荐|utmcct=/; __unam=b0971f8-138bebd9a81-7d1a81ba-869; __utmc=266616727; __atuvc=60%7C32%2C0%7C33%2C0%7C34%2C0%7C35%2C1%7C36; 帖子评分=1750
没有响应标头,因为“连接已重置
,与服务器的连接在页面加载时已重置。”
现在通常我会假设两个服务器之间存在某些端口被阻塞或其他一些连接问题,但是我已经检查过了。端口 80 在托管 WSDL 的机器上打开。我在浏览器中查看 WSDL 也没有问题,所以我知道服务器在那里并且可以在端口 80 上访问。
下面是我正在尝试的 php 测试代码
<?php
ini_set("soap.wsdl_cache_enabled", "0");
$log = fopen("debug.log","w");
fwrite($log,"about to create soap object!");
$client = new SoapClient("http://millennium.harms-software.com/MillenniumPipeline/MillenniumSDK.asmx?wsdl", array("trace" => 1, "soap_version" => SOAP_1_1, cache_wsdl => WSDL_CACHE_NONE));
fwrite($log,"created soap object!");
$logonArgs = array('User' => 'testing', 'Password' => 'temppass');
try{
$logonResult = $this->client->Logon($logonArgs);
}catch(SoapFault $soapFault){
//if failed, display soap message sent, received, and the soapfault generated
echo "Fault!!!";
var_dump($soapFault);
echo "<b>Request</b> :<br>", htmlentities($this->client->__getLastRequest()), "<br>";
echo "<b>Response</b> :<br>", htmlentities($this->client->__getLastResponse()), "<br>";
}
?>
我试图写出一个平面文件以查看代码是否正在执行,并且它似乎在创建肥皂对象后立即死亡。但是,我将这个完全相同的脚本指向另一个运行良好的 Web 服务。
在这一点上,我不知道可能导致服务器重置连接的原因。如果有人有类似的事情,请提示我。