2011-04-28 66 views
0

我试图创建一个http请求到我们的web服务,我的测试XML工作时直接输入到webservices测试输入字段,我点击“Invoke”,但是当试图使用相同的数据与PHP + NuSoap,我得到了一个奇怪的错误,我一直无法解决,我试图谷歌它,但没有相关显示了这种情况。使用PHP + NuSoap的HTTP请求

这里是要求:

POST /iInterface_pc2/service.asmx HTTP/1.0 
Host: 10.10.86.55 
User-Agent: NuSOAP/0.9.6dev (1.137) 
Content-Type: text/xml; charset=UTF-8 
SOAPAction: "http://www.xxxx.com.cn/TransferMaterialInfo" 
Content-Length: 722 

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Body> 
    <TransferMaterialInfo xmlns="http://www.xxxx.com.cn/"> 
    <Materiallist> 
     <Materialinfo> 
     <id>123456</id> 
     <title>Hello word</title> 
     <datetime>2011-04-23 12:12:12</datetime> 
     <contributor>Some One</contributor> 
     <materialurl>www.website.com/path/audio1.mp3</materialurl> 
     <duration>10000</duration> 
     <status>0</status> 
     <remark></remark> 
     </Materialinfo> 
    </Materiallist> 
    </TransferMaterialInfo> 
</soap:Body> 
</soap:Envelope> 

和响应:

HTTP/1.1 500 Internal Server Error 
Cache-Control: private 
Content-Type: text/xml; charset=utf-8 
Server: Microsoft-IIS/7.5 
X-AspNet-Version: 2.0.50727 
X-Powered-By: ASP.NET 
Date: Thu, 28 Apr 2011 11:04:11 GMT 
Connection: close 
Content-Length: 428 

<?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> 
<soap:Fault> 
<faultcode>soap:Server</faultcode> 
<faultstring>Server was unable to process request. ---&gt; Value cannot be null. 
Parameter name: s</faultstring> 
<detail /> 
</soap:Fault> 
</soap:Body> 
</soap:Envelope> 

最后的PHP我用它来生成请求

<?php 
     // include soap file 
     require_once('lib/nusoap.php'); 

     // set end point 
     $endpoint = "http://10.10.86.55/iInterface_pc2/service.asmx"; 

     // create client 
     $client = new nusoap_client($endpoint); 

     if ($client->getError()) { 
     print "Soap Constructor Error: "; 
     print_r($client->getError()); 
     } 

     // Human readable 
     $request = <<<HEREDOC 

     <TransferMaterialInfo xmlns="http://www.xxxx.com.cn/"> 
     <Materiallist> 
      <Materialinfo> 
      <id>123456</id> 
      <title>Hello word</title> 
      <datetime>2011-04-23 12:12:12</datetime> 
      <contributor>Some One</contributor> 
      <materialurl>www.website.com/path/audio1.mp3</materialurl> 
      <duration>10000</duration> 
      <status>0</status> 
      <remark></remark> 
      </Materialinfo> 
     </Materiallist> 
     </TransferMaterialInfo> 
    HEREDOC; 

     $action = "http://www.xxxx.com.cn/TransferMaterialInfo"; 

     $msg  = $client->serializeEnvelope($request, '', array(), 'document', 'encoded', ''); 
     $result = $client->send($msg, $action); 

     if ($client->fault) { //soap_fault 
     print "Soap Fault :"; 
     print_r($client->fault->faultcode); 
     print_r($client->fault->faultstring); 
     } 
     elseif ($client->getError()) { 
     print "Soap Error :"; 
     print_r($client->getError()); 
     } 
     else { 
     print "Result: "; 
     print_r($result); 
     } 

     ..print stuff 
?> 

任何见解和猜测不胜感激。现在我已经把我的头撞在一堵砖墙上。 :/

+0

我可以从内置的HelloWorld方法获得成功的响应,该方法不需要参数/参数。 – red 2011-04-28 13:05:35

回答

0

该问题已得到解决,实际上是由于错误的ASP代码只希望将空格编码为html,导致错误的响应。

+0

我无法理解空白是什么意思? – atasoyh 2012-02-20 15:36:33

+0

空白字符,单词之间空格的计算机字符。 Urlencode相当于%20 – red 2012-02-21 08:25:10

1

我相信服务器看到<和>字符并将其解码到> 您可能需要在发送之前对数据进行urlencode

+0

我已经尝试过,现在再次,urlencoding我自己发送的数据使得SOAP请求被partyl编码,部分被实体乱码 - 并且仍然给出错误。 – red 2011-04-28 12:29:22