排查了很久,在google也查了很久,但都不是我所遇到的問題。不過我最終錯誤發現跟soapserver傳輸的數據量的大小有關系(不知道這個描述是否恰當)。當我從數據庫取10條數據,那么就可以很容易的使用soapclient獲取到數據,但是當我從數據庫里查詢1000條數據的時候就會報錯了(“Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document in……”)!如果我直接運行person.class.php程序是可以顯示完整的xml文檔的。這根服務器的環境配置會有關系嗎?我對于soap認識并不深,也只是現學現賣。希望有經驗的前輩們可以指點一二。多謝了!以下是我的程序代碼:<?php//person.class.php文件class person{ public function getInfo() { $strGetList = 'SELECT * FROM information LIMIT 100'; $GLOBALS['le']->query($strGetList); $results = array(); $xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; $xmlString .="<Data>\n"; while( $rows = $GLOBALS['le']->fetch_assoc() ) { $results[] = $rows;
} foreach($results as $key=>$val) { $xmlString .="<Rec ID='UU{$key}'>\n"; foreach($val as $k=>$v ) { if(strlen($v)>0) { $v = htmlspecialchars($v); $xmlString .=" <UU{$k}>$v</UU{$k}>\n";
}
} $xmlString .="</Rec>\n";
} $xmlString .="</Data>\n"; return $xmlString;
}
}//$p = new person;//echo $p->getInfo();//經測試xml中可以顯示所有數據--- 分割線 ---<?php//server.php文件include("person.class.php");$server = new SoapServer(null,array('uri'=>'abcd','encoding'=>'UTF-8'));$server->setClass('person');$server->handle();
--- 分割線 ---<?php//client.php文件try{ $soap = new SoapClient(null,array( 'location'=>'http://192.168.1.126:102/server.php', 'uri'=>'abcd', 'encoding' => 'UTF-8',
)); $s1 =$soap->__soapCall('getInfo',array()); echo $s1;
} catch(Exction $e) { echo $e->getMessage();
}
2 回答

呼啦一陣風
TA貢獻1802條經驗 獲得超6個贊
從SoapClient的異常"[Client] looks like we got no XML document"來看應該是響應有問題,所以首要的是查看響應消息是什么,有幾種方案可以協助你定位問題:
簡單一點的,你可以用SoapUI,查看響應是否真的有問題?是否沒有響應?
Geek一點的,自制一個模擬客戶端來檢查響應消息,普通的SOAP協議并不難,只需用HTTP協議POST一小段XML給Server就行,代碼量應該在20行以內
我平時常用一點的,因為SOAP是走HTTP傳輸協議的,因此可以抓取整個HTTP Response,檢查其內容是否符合XML格式。抓取方式可以用tcpdump(Linux命令行)或HTTPTracer(Java跨平臺,使用方便,我的最愛)
直接一點的,查看SoapClient.php的源碼,我沒記錯的話代碼量挺小的,查找字符串“looks like we got no XML document”,然后往回找到XML解析那段,在解析前輸出原始內容看看到底響應內容出現了什么問題
- 2 回答
- 0 關注
- 135 瀏覽
添加回答
舉報
0/150
提交
取消