2

読者さん、こんばんは。

WinHttp.WinHttpRequest オブジェクトを介して VB クライアントから送信された xml を受信するための PHP SOAP サーバーの構築を任されました。PHPサーバーにnuSoapを使用していますが、まだ機能していません。

vb クライアントが送信した xml には、他の必要な変数と共に使用する必要がある定義済みの web サービスが含まれています。「彼ら」はこのようにそれを望んでいます:'(

SOAP サーバーは、次のように vb に応答を送信しました。

<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope SOAP-
ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
    <SOAP-ENV:Fault>
        <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
        <faultactor xsi:type="xsd:string"></faultactor>
        <faultstring xsi:type="xsd:string">Operation &apos;&apos; is not defined in the WSDL for this service</faultstring>
        <detail xsi:type="xsd:string"></detail>
    </SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

xml を送信した vb クライアント:

Private Sub Command2_Click()
 mydata = "<?xml version=""1.0"" encoding=""UTF-8""?>" & vbCrLf
  mydata = mydata & "<root>" & vbCrLf
mydata = mydata & "<SERVICE>SayHello</SERVICE>" & vbCrLf
mydata = mydata & "<NAME>Noobula</NAME>" & vbCrLf
mydata = mydata & "</root>" & vbCrLf
  Set w = CreateObject("WinHttp.WinHttpRequest.5.1")
      w.Open "POST", "http://127.0.0.1:80/soapvb/terimaxml.php"
      w.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
      w.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = 13056
      w.Send mydata
      respo = w.ResponseText
      Text1 = respo
End Sub

そして最後に、サーバー自体:

require_once "lib/nusoap.php";
$debug = 0;
$server = new soap_server();
$server->configureWSDL('terimaxml', 'urn:terimaxml');

function SayHello($xml){
    //messing with xml taking NAME and say Olaa
    echo "Olaaa :D";
}

$server->register('SayHello()',
                    array('xml' =>'xsd:array'),
                   'urn: terimaxml',
                   'urn: terimaxml#__construct()',
                   'rpc',
                   'encoded',
                   '-----'
                );

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)
? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);

これを解決するために、私はかなり長い間インターネットを歩き回っています。よろしくお願いします。:D

4

2 に答える 2

0

オペレーション '' は、このサービスの WSDL で定義されていません

その理由は

$HTTP_RAW_POST_DATA : '';

その操作&aposは、xml で禁止されているアポストロフィ値を使用して、データを xml に解析することを意味します。

すべてのアポストロフィを二重引用符(")で変更してみてください

$server->register("SayHello()",
                    array("xml" =>"xsd:array"),
                   "urn: terimaxml",
                   "urn: terimaxml#__construct()",
                   "rpc",
                   "encoded",
                   "-----"
                );

私が間違っている場合は修正してください。

^^

于 2012-08-05T06:00:43.247 に答える