5

SOAP Web サービス (Apache/PHP) を開発しています。小さなサイズの呼び出しではすべて正常に動作しますが、1Mb の SOAP 呼び出し (HTTPS 呼び出しサイズは 1MB) では、Delphi Soap クライアントは 1 つを除くすべての PC でタイムアウトで停止し、PHP クライアントは default_socket_timeout=300 で正常に動作しますが、停止します。 default_socket_timeout=60 で「HTTP ヘッダーの取得エラー」が表示されます。

Delphi のタイムアウトを変更するにはどうすればよいですか? 実際、このタイムアウトは Windows XP ネットワーク ライブラリ (soaphttptrans.pas によって呼び出される wininet.dll) にあるようです。

ありがとう
セドリック

4

2 に答える 2

5

実際、IE7のインストールに問題がありました。すべてのネットワークタイムアウトが変更されます。

IE6を搭載したPCには3600秒のタイムアウトがあり、IE7はそれを30秒に変更します。InternetQueryOption()を使用するとこれが表示され、InternetSetOptionはこれを変更するのに役立ちます。

何時間もバグを探してくれた仕事仲間に感謝します。

于 2010-04-19T10:11:08.413 に答える
3

SOAPHttpTransにはMaxSinglePostSizeがあります。それで問題があったことを思い出しているようです。これは制限ではありませんが、制限を超えている場合、または制限を下回っている場合は、動作が異なります(送信用にチャンクに分割されます)。(基本的にデフォルトでは32768)。ワイドストリングのため、D2009 / D2010を使用している場合は、より早くそのサイズに達すると思います。そのサイズの周りで問題が発生するかどうかを確認するのは興味深いでしょう。Fiddlerを使用して出力をキャプチャし(またはOnBeforePostイベントにフックして、シリアル化されたXMLを自分でファイルにダンプし)、以前に観察された1MBの代わりに、問題が発生する場所があるかどうかを確認できます。

とにかく、THTTPReqRespクラスにはSendTimeoutとReceiveTimeoutのオプションがあります。それらを調整してみてください。

また...Delphi2007より前のDelphiを使用している場合は、soapライブラリを更新する必要があります。どこかにダウンロードがあります...DEPによってアプリが停止する原因となる厄介なメモリの問題を含む多くのバグ修正。

于 2010-04-16T16:01:21.263 に答える