2012-06-21 83 views
0

我遇到了一些问题,想知道是否有人可以帮助我解决这个问题。C#Webservice和静态变量

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

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来解决这个问题,但没有奏效。这全局变量在所有会话中运行时,我不希望出现这种情况

有什么替代方案,我可以提前在这种情况下使用

我感谢所有的答复!

+0

我不清楚,究竟“问题”是......我 –

+0

是有点难以解释的人,但我会尽我所能 – Woelig

+0

这是你的问题?真的,我们不介意读者...... – Marco

回答

2

我建议在数据库中存储UploadPath。这样就保证了在所有运行会话中都是全球性的。

+0

这正是我的问题! – Woelig

1

尝试使用此代码(删除static修饰符)

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

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

     public ApplicationWSGlobal() 
     { 
      InitializeComponent(); 
     } 
    } 
+0

但是,如何从global.asax中设置UploadPath呢? – Woelig

+0

我已将公共修饰符添加到UploadPath属性 –

+0

如何从global.asax Application_BeginRequest()设置UploadPath? – Woelig

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