2013-06-21 3 views
0

Я работаю над интеграцией существующего пакета программного обеспечения с программным обеспечением сторонних разработчиков, использующим API на основе SOAP. Тем не менее, я не могу генерировать XML из последнего запроса, чтобы помочь устранить неполадки, потому что я не верю, что вызов действительно будет выполнен. Единственное логическое объяснение, которое я могу придумать, заключается в том, что PHP проверяет запрос на WSDL перед отправкой запроса. Код не нужен для этого вопроса, и я попробовал слишком много вариантов для этого, чтобы выбрать один или два образца для совместного использования. Я заменил ошибочный вызов SOAP на действительный, и XML сгенерирован и успешно возвращен и, как ожидалось.Проверяет ли PHP запросы на WSDL перед отправкой запроса?

Кто-нибудь знает, как определить, что PHP выполняет запросы, а запрос терпит неудачу, или возможно ли заставить PHP аннулировать запрос к WSDL и вообще не выполнить вызов?

Если у вас есть вопросы, задайте вопросы. Я ценю помощь!

ответ

0

Попробуйте отладить ваш скрипт, чтобы узнать, действительно ли он делает запрос. Объект PHP SoapClient делает его довольно простым. Взгляните на SoapClient::_getLastRequest и SoapClient::_getLastResponse.

Если вы хотите что-то немного ниже, ngrep - отличный простой инструмент для наблюдения за тем, что происходит через провод.

Возьмите этот простой скрипт ...

<?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 (&amp;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>[email protected]</AuthorEmail><AuthorHomepage>http://www.27seconds. 
    com</AuthorHomepage><ArticleBody>&lt;p&gt;..When I was dynamically populating form values, I found that if the data has a double quote (&amp;qout;) in it, it would 
    cut off the data entered in the form...&lt;/p&gt;....&lt;p&gt;..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:..&lt;/p&gt;....&lt;p&g 
    t;..&lt;div style="width=450;height=300;overflow=scroll;"&gt;..&lt;pre&gt;..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..&lt;/pre&gt;..&lt;/div&gt;..&lt;/p&gt;....&lt;p& 
    gt;This is used when you assign a value to the form field:&lt;/p&gt;....&lt;p&gt;..&lt;div style="width=450;height=300;overflow=scroll;"&gt;..&lt;pre&gt;..&amp;lt;i 
    nput type="text" name="example" value="&amp;lt;%=formEncode("The ""test"" is good.") %&amp;gt;"&amp;gt;..&lt;/pre&gt;..&lt;/div&gt;..&lt;/p&gt;</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] 
    [email protected]</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>                                 
#[email protected]:~# ## 
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 звонит? Есть много других способов сделать это, но отладка должна быть вашим первым портом захода. :)

Удачи вам,

Anthony.

0

Похоже, ваш вопрос: вы пытаетесь сделать SOAP-вызов, хотя PHP на стороне сервера, и вы не знаете, сделан ли вызов.


Если вы хотите проверить, был ли произведен вызов, вы можете заменить объект SOAP на ваш макетный объект, а в пределах макетного объекта попытайтесь увидеть, что вызов выполнен.