Web サービス アプリケーションでグローバルに知られている変数が必要です。Web ベースであるため、グローバルに宣言された変数の値は、再度呼び出されても同じままです。
WebメソッドでSessionも使用しようとしましたが、他のメソッドが呼び出されるとクリアされます。
これがコードサンプルです。
UI部分
private void btnOKLogIn_Click(object sender, EventArgs e)
{
CaprepWS caprepWS = new CaprepWS();
caprepWS.setDatabase(Program.isProduction);
string usrInfo = caprepWS.getUserInfo(tbUserName.Text.ToUpper().Trim());
}
Web サービス部分
[WebMethod(Description = "Database switcher", EnableSession = true)]
public void setDatabase(bool isProduction)
{
Session["isProduction"] = isProduction;
}
[WebMethod(Description = "Get User Info", EnableSession = true)]
public string getUserInfo(string username)
{
string wsResult = null;
DataAccess sql = new DataAccess((bool)Session["isProduction"]);
try
{
sql.OpenConn();
wsResult = sql.Scalar(
sql.spReader(sqlRoot + "spGetUserInfo.SQL")
, username);
}
catch (Exception ex)
{
errorWritter(ex.Message);
wsResult = null;
}
finally
{
sql.Dispose();
}
return wsResult;
}
しかし、UI で同じインスタンスを使用している場合でも、他のメソッドでは (getUserInfo で) セッションが不明であり、null です。
問題は、この変数をすべての Web メソッドに Web サービスのパラメーターとして配置することを避けていることです。そのため、グローバルに宣言する必要があります。