我开发了一个ASP.NET Web服务,可以对数据库执行查询。现在我正在开发一个PHP Web站点,该站点使用Web Service来处理需要访问数据库的任何内容。我编写了以下函数,它创建了一个新的SoapClient来使用Web服务:
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);
}
我已经测试过这个函数作为将客户端发送到无状态 Web服务的方法,它确实有效。例如,这是我的网站的登录功能(其控制流不受状态影响):
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
个对象发出的连续请求之间是否保留了Web服务的get_soap_client()
数据。所以我有以下问题:
从Context.Session
检索到的SoapClient
对象发出的连续请求之间是否保留了Web服务的get_soap_client()
数据?
Web服务的Context.Session
数据是否在我需要的动态检索的不同 SoapClient
个对象的连续请求之间保留?
如果上一个问题的答案是“否”,有没有办法将SoapClient
的会话数据序列化为PHP状态变量?
答案 0 :(得分:1)
啊,你的意思是发送SESSION ID。我想你需要手动调用__setCookie来设置一个带有SESSION ID的cookie到你的web服务。