我正在使用基于SOAP的API将现有软件包与第三方软件包集成。但是,我无法从上次请求生成XML来帮助进行故障排除,因为我不相信实际的调用。我能想到的唯一合乎逻辑的解释是PHP在实际发送请求之前验证了对WSDL的请求。代码对于这个问题不是必需的,我已经尝试了太多的变体来选择一个或两个样本来分享。我已使用有效的SOAP调用替换了错误的SOAP调用,并且生成并成功返回XML。
有没有人知道如何确定PHP是否发出请求并且请求失败,或者是否可能让PHP使WSDL请求无效并且根本无法进行调用?
如果您有任何疑问,请随时提出。我很感激帮助!
答案 0 :(得分:0)
看起来您的问题是:您正尝试通过服务器端的PHP进行SOAP调用,但您不知道是否进行了调用。
如果要检查是否进行了调用,可以使用您的模拟对象替换SOAP对象,并在模拟对象中尝试查看f是否进行了调用。
答案 1 :(得分:0)
尝试调试脚本以查看它是否实际发出请求,PHP的SoapClient对象使其变得非常简单。请查看SoapClient::_getLastRequest 和SoapClient:: _getLastResponse。
如果你想要一些更低的东西,ngrep是一个很好的简单工具,可以监视线路上的内容。
采用这个简单的PHP脚本......
<?php
$client = new SoapClient('http://www.27seconds.com/kb/ws/Articles.asmx?WSDL');
$article = $client->GetArticle(array('articleId' => 7));
执行ngrep port 80 &
然后执行上面的脚本将转储流量,它应该看起来与此类似......
##
T 208.106.153.223:80 -> 10.0.2.15:40760 [AS]
..
##
T 10.0.2.15:40760 -> 208.106.153.223:80 [AP]
POST /kb/ws/Articles.asmx HTTP/1.1..Host: www.27seconds.com..Connection: Keep-Alive..User-Agent: PHP-SOAP/5.3.10-1ubuntu3.6..Content-Type: text/xml; charset=utf-8..
SOAPAction: "http://dsetzer.27seconds.com/ws/GetArticle"..Content-Length: 279....<?xml version="1.0" encoding="UTF-8"?>.<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://sc
hemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://dsetzer.27seconds.com/ws/"><SOAP-ENV:Body><ns1:GetArticle><ns1:articleId>7</ns1:articleId></ns1:GetArticle></SOA
P-ENV:Body></SOAP-ENV:Envelope>.
#
T 208.106.153.223:80 -> 10.0.2.15:40760 [A]
......
#
T 208.106.153.223:80 -> 10.0.2.15:40760 [A]
HTTP/1.1 200 OK..Date: Fri, 21 Jun 2013 21:11:21 GMT..Server: Microsoft-IIS/6.0..X-Powered-By: ASP.NET..X-AspNet-Version: 2.0.50727..Cache-Control: private, max-age
=0..Content-Type: text/xml; charset=utf-8..Content-Length: 4804....<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/
envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetArticleResponse xmlns="http://dsetzer.2
7seconds.com/ws/"><GetArticleResult><xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msda
ta"><xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" maxOccurs="unbounded"><xs:element
name="Articles"><xs:complexType><xs:sequence><xs:element name="ArticleID" type="xs:int" minOccurs="0" /><xs:element name="ArticleTitle" type="xs:string" minOccurs="
0" /><xs:element name="ArticleSummary" type="xs:string" minOccurs="0" /><xs:element name="ArticleAuthorID" type="xs:int" minOccurs="0" /><xs:element name="ArticlePu
blishDate" type="xs:dateTime" minOccurs="0" /><xs:element name="AuthorName" type="xs:string" minOccurs="0" /><xs:element name="AuthorEmail" type="xs:string" minOccu
rs="0" /><xs:element name="AuthorHomepage" type="xs:string" minOccurs="0" /><xs:element name="ArticleBody" t
##
T 208.106.153.223:80 -> 10.0.2.15:40760 [AP]
ype="xs:string" minOccurs="0
##
T 208.106.153.223:80 -> 10.0.2.15:40760 [A]
" /><xs:element name="ArticleRating" type="xs:double" minOccurs="0" /></xs:sequence></xs:complexType></xs:element><xs:element name="Authors"><xs:complexType><xs:seq
uence><xs:element name="AuthorID" type="xs:int" minOccurs="0" /><xs:element name="AuthorName" type="xs:string" minOccurs="0" /><xs:element name="AuthorEmail" type="
xs:string" minOccurs="0" /></xs:sequence></xs:complexType></xs:element><xs:element name="Applicables"><xs:complexType><xs:sequence><xs:element name="appID" type="xs
:int" minOccurs="0" /><xs:element name="appDescr" type="xs:string" minOccurs="0" /></xs:sequence></xs:complexType></xs:element><xs:element name="Keywords"><xs:compl
exType><xs:sequence><xs:element name="KeyID" type="xs:int" minOccurs="0" /><xs:element name="KeyArticleId" type="xs:int" minOccurs="0" /><xs:element name="Keyword"
type="xs:string" minOccurs="0" /></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema><diffgr:diffgram xmlns:msdata="ur
n:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><NewDataSet xmlns=""><Articles diffgr:id="Articles1" msdata:rowOrder="0
"><ArticleID>7</ArticleID><ArticleTitle>Handle double quotes in a form.</ArticleTitle><ArticleSummary>When pulling data from a form or database you can into trouble
if the data contains a double quote (&quot;).</ArticleSummary><ArticleAuthorID>1</ArticleAuthorID><Arti
##
T 208.106.153.223:80 -> 10.0.2.15:40760 [AP]
clePublishDate>2002-03-05T11
##
T 208.106.153.223:80 -> 10.0.2.15:40760 [A]
:40:54-05:00</ArticlePublishDate><AuthorName>Douglas L. Setzer, II</AuthorName><AuthorEmail>dsetzer@27seconds.com</AuthorEmail><AuthorHomepage>http://www.27seconds.
com</AuthorHomepage><ArticleBody><p>..When I was dynamically populating form values, I found that if the data has a double quote (&qout;) in it, it would
cut off the data entered in the form...</p>....<p>..To solve this, I found that I could simple Server.HtmlEncode the value and all was well. Except whe
n I was populating from a database and the data was NULL which caused an error for Server.HtmlEncode. So, I whipped up this little function:..</p>....<p&g
t;..<div style="width=450;height=300;overflow=scroll;">..<pre>..Function formEncode(formValue)..Dim m_sOut.. m_sOut = formValue.....If IsNull(m_sOut)
Then....m_sOut = ""...Else....m_sOut = Server.HTMLEncode(m_sOut)...End If.....formEncode = m_sOut....End Function..</pre>..</div>..</p>....<p&
gt;This is used when you assign a value to the form field:</p>....<p>..<div style="width=450;height=300;overflow=scroll;">..<pre>..&lt;i
nput type="text" name="example" value="&lt;%=formEncode("The ""test"" is good.") %&gt;"&gt;..</pre>..</div>..</p></ArticleBody></Artic
les><Authors diffgr:id="Authors1" msdata:rowOrder="0"><AuthorID>1</AuthorID><AuthorName>Douglas L. Setzer, I
##
T 208.106.153.223:80 -> 10.0.2.15:40760 [AP]
I</AuthorName><AuthorEmail>d
#
T 208.106.153.223:80 -> 10.0.2.15:40760 [AP]
setzer@27seconds.com</AuthorEmail></Authors><Applicables diffgr:id="Applicables1" msdata:rowOrder="0"><appID>1</appID><appDescr>Active Server Pages (ASP)</appDescr>
</Applicables><Keywords diffgr:id="Keywords1" msdata:rowOrder="0"><KeyID>386</KeyID><KeyArticleId>7</KeyArticleId><Keyword>CHR(34)</Keyword></Keywords><Keywords dif
fgr:id="Keywords2" msdata:rowOrder="1"><KeyID>388</KeyID><KeyArticleId>7</KeyArticleId><Keyword>DOUBLE QUOTE</Keyword></Keywords><Keywords diffgr:id="Keywords3" msd
ata:rowOrder="2"><KeyID>387</KeyID><KeyArticleId>7</KeyArticleId><Keyword>QUOTE</Keyword></Keywords></NewDataSet></diffgr:diffgram></GetArticleResult></GetArticleRe
sponse></soap:Body></soap:Envelope>
#root@precise64:~# ##
T 208.106.153.223:80 -> 10.0.2.15:40760 [A]
......
#
T 208.106.153.223:80 -> 10.0.2.15:40760 [AF]
......
注意SOAP调用?还有很多其他方法可以做到这一点,但调试应该是您的第一个停靠点。 :)
祝你好运,安东尼。