質問

PHP 5.2.6でNuSOAPを使用していますが、最大メッセージサイズは1000バイトしかありません(意味のあることをするのは困難です)。これはエンドポイントのWSDLで設定されていますか、それともNuSOAPで設定できるものですか?

役に立ちましたか?

解決

「1000バイト制限」に関するFUDについて... nusoap_clientソースコードを調べたところ、制限はデバッグ出力にのみ有効であることがわかりました。

これは、すべてのデータが処理されて(サイズに関係なく)Webサービスに渡されることを意味しますが、デバッグログには最初の1000バイト(正確には文字)のみが表示されます。

コードは次のとおりです。

$this->debug('SOAP message length=' . strlen($soapmsg) . ' contents (max 1000 bytes)=' . substr($soapmsg, 0, 1000));

// send
$return = $this->send($this->getHTTPBody($soapmsg),$soapAction,$this->timeout,$this->response_timeout);

お分かりのように、 getHTTPBody()呼び出しは $ soapmsg 全体を使用し、デバッグ出力のみが最初の1000文字に制限されています。これを変更する場合は、ニーズに合わせて substr()呼び出しを変更するか、単に $ soapmsg に置き換えます(すべてがデバッグに表示されます)出力も)。

これは、実際に送信されるデータの実際の制限とはまったく関係ありません。もちろん、送信できるサイズを実際に制限する他の要因(PHPスクリプトに設定されたRAM制限、HTTP実装の制限、利用可能な仮想メモリの不足など)がありますが、 「1000バイトの制限」など。 NuSOAPで送信できるデータについて。

他のヒント

私はPHPに非常に精通しているだけで、NuSOAPパッケージをまったく使用したことがありません。ただし、SOAPメッセージのサイズは、トランスポートメディアによってのみ制限されます。 HTTPの場合、ほとんど無制限である必要があります(フォームPOSTリクエストの16384バイトの制限はSOAPによるものではなく、ブラウザーの制限によるものです(実際にはもう存在しないかもしれませんが、確かなことはわかりません) )。

NuSOAPの作成者/管理者の連絡先を見つけて、直接問い合わせることをお勧めします。 WSDLに何かがなければ(そして、全体の本文ではなく、メッセージボディサイズ全体を制限する個々のパラメーター(XMLスキーマファセット経由)を制限するWSDL仕様には何も思い出さない)ツールキットに含まれているようです。

プロダクションボックスでは、PHP 5.2.5ビルトインSoap関数をサーバーとして使用し、PHP 4でNuSoapを使用し、1 MBを超えるメッセージを正常に転送しました。

どちらの製品にも制限があるとは思いませんが、php.iniの設定を確認してください

max_input_time        (defaults to 60)

これは、各スクリプトが入力を解析できる時間です。解析が完了する前に時間が経過すると、スクリプトは実行されません。

補足:可能であれば、SoapClient / SoapServer PHP拡張クラスに移行することをお勧めします。 NuSoapは、特にキャッシュに関しては、高負荷の状況ではあまり信頼性がないことが証明されています。 NuSoapが単に「忘れる」ということもありました。 wsdl定義およびnone-wsdl-modeでの作業。奇妙な...

SOAPメッセージを送信するか受信するかは言っていません。送信している場合、NuSOAPがGETではなくPOSTを介して送信していることを確認します(おそらく、コードを掘り下げて確認する必要があります。ドキュメントがまばらであることがわかりました)。受信している場合は、メモリやデータサイズなどについてPHP.INI設定を確認してください。実際には、とにかくメモリ制限を確認してください-NuSOAPはメモリを大量に消費するIIRCです。

メッセージのサイズは、ハードコードされた値ではなく、PHPのメモリ制限によって制限されると思います。少なくとも問題なく6.5MBの文字列を送信できました。 8MBの文字列を送信しようとしたときに、nusoap.php内でメモリ不足例外が発生しました(私のサーバーにはPHPの64MBの制限があります)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top