September 20, 2010

Переносимость wsdl файлов между серверами

Думаю у многих, кто сталкивался с разработкой вебсервисов с описанием их через WSDL файлы, возникала проблема, когда при переносе с dev-сервера на prod-сервер приходилось менять путь к расположению веб-сервера, к примеру:

<soap:address xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" location="http://localhost/soapServer.php"/>

или, скажем, когда урл сервера используется в качестве namaspace, и хочется, чтобы на прод-сервере фигурирувал именно его урл, а не какой-нибудь localhost.

При переносе между серверами частенько забывается поменять упомянутые выше параметры wsdl файла и бывает так, что веб-сервис не хочет работать, пока об этом не вспомнишь.

Во избежание таких ситуаций можно предложить простой, и довольно очевидный метод — использование РНР для генерации адреса сервера!

Т.е. мы отдаем клиенту не WSDL в чистом виде, а результат, полученый после обработки его РНР интерпретатором. Тогда мы можем использовать РНР функции и встроенные переменные, в частности переменную $_SERVER, которая позволит нам получить необходимую информацию.

Т.о., мы сможем написать путь к местоположению сервера как

<soap:address xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" location="http://' . $_SERVER['SERVER_NAME'] . '/soapServer.php"/>

Вот и вся магия! Возможно, данная заметка кому-то будет полезной.