1

私はSOAPを初めて使用し、いくつかの出力を.NETサーバーに送信して.これに一致します:

    POST /someurl.asmx HTTP/1.1
Host: www.somehost.com
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://somehost.com/SubmitCalls"

<?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>
    <SubmitCalls xmlns="http://somehost/">
      <request>string</request>
    </SubmitCalls>
  </soap:Body>
</soap:Envelope>

私のnusoapコードは次のようになります:

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

$bodyxml = '<?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>
<SubmitCalls xmlns="http://somehost/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<request>
<?xml version="1.0" encoding="UTF-8"?>
<bXML xmlns="http://somehost/Schemas" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <From>
  <UserName>some username</UserName>
  <Password>some password</Password>
 </From>
 <Calls>
  <Call>
   <Reference>11111</Reference>
   <Name>Joe Bloggs</Name>
   <Tel1>02075574200</Tel1>
   <Tel2>02075574201</Tel2>
   <Tel3>02075574202</Tel3>
   <Tel4>02075574203</Tel4>
   <Tel5>02075574204</Tel5>
   <CLI>08448220640</CLI>
   <CallTime>09:00</CallTime>
   <FileName>02075574200_1</FileName>
  </Call>
 <Call>
   <Reference>11111</Reference>
   <Name>Joe Bloggs</Name>
   <Tel1>02075574200</Tel1>
   <Tel2>02075574206</Tel2>
   <Tel3>02075574207</Tel3>
   <Tel4>02075574208</Tel4>
   <Tel5>02075574209</Tel5>
   <CLI>08448220640</CLI>
   <CallTime>09:00</CallTime>
   <FileName>02075574200_2</FileName>
  </Call>
 </Calls>
</bXML>
</request>
</SubmitCalls>
</soap:Body>
</soap:Envelope>
';


$client = new nusoap_client("somehost?WSDL",true);
$err = $client->getError();
if ($err) {
 echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
 exit();
}

$client->soap_defencoding = 'utf-8';
$client->useHTTPPersistentConnection();
$client->setUseCurl($useCURL);
$bsoapaction = "http://somehost/SubmitCalls";
$result = $client->send($bodyxml, $bsoapaction);
// Check for a fault
if ($client->fault) {
 echo '<h2>Fault</h2><pre>';
 print_r($result);
 echo '</pre>';
} else {
 // Check for errors
 $err = $client->getError();
 if ($err) {
  // Display the error
  echo '<h2>Error</h2><pre>' . $err . '</pre>';
 } else {
  // Display the result
  echo '<h2>Result</h2><pre>';
  print_r($result);
  echo '</pre>';
 }
}
echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
echo '<h2>Client Debug</h2><pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
echo '<h2>Proxy Debug</h2><pre>' . htmlspecialchars($proxy->debug_str, ENT_QUOTES) . '</pre>';
?>

(明らかに、すべての somehost とユーザー名は最終的なスクリプトで正しいです)。WSDL に接続して読み取ることができます。関心のあるメソッド (SubmitCalls) は 1 つだけで、WSDL スキーマで「パラメーター」という名前の 1 つの部分しかありません。上記は 400 Bad request エラーをスローします - どこが間違っているのでしょうか?

代わりに PHP SOAP を使用してみましたが、SOAP 要求の本文として XML 文字列を送信できないようです。私はこれを 3 日間いじり続け、無数の Web ページを読みましたが、まだ正しく理解できません。助けてください....いずれかのライブラリを使用してこれを行う方法を教えていただければ、非常に感謝しています....

4

4 に答える 4

5

$client->send() メソッドでプレーン XML を送信できます。

$raw_xml = "<Your_XML>...</Your_XML>";
$msg = $client->serializeEnvelope("$raw_xml");
$result=$client->send($msg, $endpoint);

ここで例を見ることができます:

http://itworkarounds.blogspot.com/2011/07/send-raw-xml-with-php-nusoap.html

それでもうまくいかない場合は、CURL を使用して XML を投稿してみてください。

于 2011-08-04T11:33:14.170 に答える
3

-これを試して-

$xml = simplexml_load_string('<data>x</data>')

そして(ヌソープ)

$result = $client->call('host', array('parameter' =>$xml)
于 2011-07-14T20:38:52.430 に答える
1

この問題に対する正確な答えではありませんが、現在は解決されています。サービスプロバイダーは新しいメソッドを作成しました。これは、文字列ではなくXMLドキュメントを許可することを除いてすべての点で同一でした。$ bodyxml変数の内容に若干の変更を加え、この新しいメソッドに送信することで、正常に機能しているように見えます。

ちなみに、SOAPアプリケーションのデバッグを検討している人は、SourceforgeからSOAPUIを取得することを検討する必要があります。これは、問題を健全にチェックするのに本当に役立ち、修正のためのいくつかの有用な指針を提供しました。

于 2010-11-22T18:07:38.893 に答える
0

いつでもxmlを文字列として送信し、ライブラリをねじ込むことができます。推奨されませんが、場合によってはその方が簡単です。

を忘れないでHeader("SoapAction: ...")

于 2010-11-19T20:52:14.217 に答える