-1

我需要一个 Web 服务应用程序上的全局已知变量。由于是基于 Web 的,全局声明的变量的值在再次调用时保持不变。

我也尝试在 Web 方法上使用 Session,但在调用其他方法时它会被清除。

这是一个代码示例。

用户界面部分

private void btnOKLogIn_Click(object sender, EventArgs e)
{
    CaprepWS caprepWS = new CaprepWS();
    caprepWS.setDatabase(Program.isProduction);
    string usrInfo = caprepWS.getUserInfo(tbUserName.Text.ToUpper().Trim());
}

网络服务部分

[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 上)并且它为空。

问题是我避免将这个变量作为我的 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 回答