2011-12-29 11 views
2

PHPのSoapClientクラスを使用して呼び出されているASP .NET SOAPサービスがあります。一般に、私が呼んでいるサービス方法は機能しますが、選択されたいくつかのケースでは一貫して失敗します。失敗した場合、サービスは約90秒後にタイムアウトします。一部のリクエストでASP .NET SOAPサービスがXMLを逆シリアル化できない

問題の根本原因を、提供されているXMLを逆シリアル化しようとしているASP .NETサービスにトレースしました。ログでは、.NETサービスがXMLが切り捨てられたと考えているようです。

System.Xml.XmlException:予期しないファイルの終了が発生しました。次の要素が閉じていない:NS1:説明、[...]、SOAP-ENV:ボディ、SOAP-ENV:封筒

のSystem.InvalidOperationException:XML文書内のエラー(2、9383)があります

私のPHPコードでは、$ client - > __ getLastRequest()を呼び出してリクエストに使用されているXMLを記録しています。提供されているXMLは有効であり、非直列化を破る可能性のある異常な文字はありません。

問題を見知らぬものにするには、失敗するリクエストは1つだけではありません。一貫して3つのリクエストを失敗させることができます。

リクエストのうち2つは正確に同じ長さであり、同じ文字では失敗しています。 XMLのリクエストの長さは9576文字、PHPが投稿するContent-Lengthヘッダーは9615、サービスは文字9383で失敗しています。問題の文字の前に何かを追加、削除、または変更すると、 d ")、要求が通過します。失敗している文字は、同じ文字で、両方の要求で同じ場所にあります。

これは本当ですが、3番目の失敗した要求は4812文字で、Content-Lengthヘッダーが4852で、文字3863で失敗しています。この場合の文字は同じ文字ではありません(文字 "g" )、それは同じXMLノード内にはありません。

これらのリクエストに何かを追加したり、そこから要素を削除したりすると、問題なく処理されます。デシリアライズが失敗するキャラクタの前に発生する限り、特定の要素を削除または変更する必要はありません。

誰も、なぜこのタイムアウトがこれらの要求に対して起こっている可能性がありますか?潜在的な回避策の提案はありますか?

答えて

0

私の回避策は、あなたのPOSTリクエストのContent Lengthを、実際にはlength($request)-1より1文字少なく設定することです。

詳細な説明のおかげで、私は自分の問題を解決することができました。

関連する問題