C#Webservice和Static Variables

时间:2012-06-21 14:51:27

标签: c# multithreading web-services session

我遇到了一些问题,并且想知道是否有人可以帮我解决这个问题。

问题是静态变量在不同的线程调用/ seasions之间共享。 这是原始代码:

public partial class ApplicationWSGlobal : System.Web.Services.WebService
{
    public static string UploadPath = @"";

    public ApplicationWSGlobal()
    {
        InitializeComponent();
    }

    [Webmethod]
    public void DoSomeThing()
    {
        ... = UploadPath;            
    }
}

我在global.asax类中设置了UploadPath。

 public void Application_BeginRequest() 
 {
     ApplicationWSGlobal.UploadPath = getData();
 }

我试图通过将[ThreadStatic]添加到“UploadPath”var来解决此问题,但它不起作用。全局变量运行在所有会话中,我不希望这样

我可以在这种情况下使用任何替代方案

我感谢所有的回复!

3 个答案:

答案 0 :(得分:2)

我建议将UploadPath存储在数据库中。这样,它可以保证在所有正在运行的会话中都是全局的。

答案 1 :(得分:1)

尝试使用此代码(删除静态修改器)

    public partial class ApplicationWSGlobal : System.Web.Services.WebService
    {
        public string UploadPath = @"";

        [WebMethod]
        public void SetUploadPath(string x)
        {
            UploadPath = x;
        }

        public ApplicationWSGlobal()
        {
            InitializeComponent();
        }
     }

答案 2 :(得分:1)

var applicationWSGlobal = new ApplicationWSGlobal
{
   UploadPath = your value
};