استفاده از وب سرویسهای تحت وب اغلب با مشکلاتی همراه است. یکی از این مشکلات، رخداد خطاهای نامشخص از سمت وب سرویس است. به دلیل اینکه ارسال و دریافت و پردازش اطلاعات به وب سرویس از طریق افزونهی SOAP انجام میشود، کشف اشکالهای نامشخصی که در سمت سرویسدهنده رخ داده است، به آسانی امکان پذیر نیست.
برای رفع این مشکل ابتدا باید بخشی از فرآیند ارسال و دریافت را تحت کنترل بگیریم و بررسی کنیم که چه اطلاعاتی ارسال و دریافت شدهاند و چه خطاهایی به وجود آمده که مانع عملکرد صحیح سیستم شدهاند.
ارسال یک درخواست SOAP در php معمولا به شکل زیر انجام میشود:
$client = new SoapClient( 'https://example.com/webservice?wsdl' ); $result = $client->function( $param1, $param2 );
اگر هنگام فراخوانی تابع مورد نظر با پیامهایی نامشخص مثل:
SoapFault exception: looks like we got no XML document
مواجه شویم، میبایست بررسی کنیم که دقیقا چه اطلاعاتی از وب سرویس دریافت شده است و علت مشکل را از آن طریق بررسی کنیم. برای انجام این کار کدهای فراخوانی وب سرویس را به شکل زیر تغییر میدهیم:
$client = new SoapClient( 'https://example.com/webservice?wsdl', [ 'trace' => true ] ); try { $result = $client->function( $param1, $param2 ); } catch( Exception $e ) { var_dump( $client->__getLastResponse() ); }
همان طور که مشاهده میکنید، ابتدا در تنظیمات کلاس SoapClient مقدار trace را معادل true قرار دادیم تا امکان خطایابی برای ما فراهم شود. سپس در یک ناحیه try...catch در صورت رخداد خطا، پاسخ دریافت شده هنگام فراخوانی تابع را بررسی میکنیم.
زمانی که ویژگی trace را فعال کنید، امکان استفاده از توابع زیر فراهم میشود که هر یک میتوانند به خطایابی وب سرویس و رفع مشکلات آن به شما کمک برسانند.
- __getLastRequest
- __getLastRequestHeaders
- __getLastResponse
- __getLastResponseHeaders