Я разработал веб-службу ASP.NET, которая выполняет запросы к базе данных.Сейчас я разрабатываю веб-сайт PHP, который использует веб-службу для всего, что требует доступа к базе данных.Я написал следующую функцию, которая создает новый SoapClient для использования веб-службы:
function get_soap_client()
{
if (!file_exists('wsdl_path.txt')
return NULL;
if (!$file = fopen('wsdl_path.txt', 'r'))
return NULL;
$path = fgets($file);
fclose($file);
return new SoapClient($path);
}
Я уже протестировал эту функцию как средство для перевода клиента в веб-службу без состояния ,и это работает.Например, это функция входа в систему моего веб-сайта (на поток управления которой не влияет состояние):
function try_login($user, $pass)
{
$client = get_soap_client();
// ASP.NET Web Services encapsulate all inputs in a single object.
$param = new stdClass();
$param->user = $user;
$param->pass = $pass;
// Execute the WebMethod TryLogin and return its result.
// ASP.NET Web Services encapsulate all outputs in a single object.
return $client->TryLogin($param)->TryLoginResult;
}
, которая в свою очередь вызывает следующий WebMethod:
[WebMethod(EnableSession = true)]
public bool TryLogin(string user, string pass)
{
SqlParameter[] pars = new SqlParameter[2];
pars[0] = new SqlParameter("@User", SqlDbType.VarChar, 20);
pars[0].Value = user;
pars[1] = new SqlParameter("@Pass", SqlDbType.VarChar, 20);
pars[1].Value = pass;
// The Stored Procedure returns a row if the user and password are OK.
// Otherwise, it returns an empty recordset.
DataTable dt = Utilities.RetrieveFromStoredProcedure('[dbo].[sp_TryLogin]', pars);
if (dt.Rows.Count == 0) // Wrong user and/or password
{
Context.Session.Abandon();
return false;
}
else
return true;
}
Однако яне знаю, сохраняются ли данные Context.Session
веб-службы между последовательными запросами, сделанными из SoapClient
объектов, полученных с помощью get_soap_client()
.Поэтому у меня есть следующие вопросы:
Сохраняются ли данные Context.Session
веб-службы между последовательными запросами, сделанными из SoapClient
объекта, полученного с помощью get_soap_client()
?
Сохраняются ли данные веб-службы Context.Session
между последовательными запросами, сделанными из различных SoapClient
объектов, извлекаемых на лету, когда они мне нужны?
Если ответ на предыдущий вопрос «нет», есть ли способ сериализации данных сеанса SoapClient
в переменную состояния PHP?