【问题标题】:C# Webservice and Static VariablesC# Web 服务和静态变量
【发布时间】:2012-06-22 00:13:07
【问题描述】:

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

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

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”变量来解决问题,但它不起作用。全局变量在所有会话中运行,我不希望这样

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

我提前感谢所有回复!

【问题讨论】:

  • 我不清楚“问题”到底是什么......
  • 我有点难以解释,但我会尽力而为
  • 你的问题是什么?真的,我们不是读心者……
  • 您是否期望多次调用最终保持状态,而您自己却不做任何事情?
  • 静态变量应该是这样工作的。它们存在于实例化对象之外。

标签: c# multithreading web-services session


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试这段代码(去掉静态修饰符)

        public partial class ApplicationWSGlobal : System.Web.Services.WebService
        {
            public string UploadPath = @"";
    
            [WebMethod]
            public void SetUploadPath(string x)
            {
                UploadPath = x;
            }
    
            public ApplicationWSGlobal()
            {
                InitializeComponent();
            }
         }
    

    【讨论】:

    • 但是我如何从 global.asax 设置 UploadPath 呢?
    • 我已将 public 修饰符添加到 UploadPath 属性
    • 如何从 global.asax Application_BeginRequest() 设置 UploadPath?
    • var applicationWSGlobal = new ApplicationWSGlobal
    【解决方案3】:
    var applicationWSGlobal = new ApplicationWSGlobal
    {
       UploadPath = your value
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 2013-03-29
      相关资源
      最近更新 更多