-1

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 サービスのパラメーターとして配置することを避けていることです。そのため、グローバルに宣言する必要があります。

4

1 に答える 1

0

アプリケーションの構成設定を探しているようです。

つまり、ASP.Net でサービスを実行している場合、config はweb.configになり、カスタム値は次のようになります。

<appSettings>
  <add key="IsProduction" value="true"/>
</appSettings>

ConfigurationManagerで読み取るコード:

 var isProduction = ConfigurationManager.AppSettings["IsProduction"] == "true";
于 2013-07-30T07:39:52.023 に答える