c# – 两个WCF方法之间的全局变量

我在WCF服务中有两个方法
Method1()
{
 _currentValue = 10;
}

Method2()
{
return _currentValue;
}

我有一种情况,我需要在Method1()中设置一个值,并在Method2()中读取它.

我尝试使用静态变量,如public static int _currentValue,我能够读取Method2()中Method1()中设置的值.

但问题是,我希望这个变量像每个请求的单独实例变量一样做出反应.即,现在下面是问题

浏览器1:

- Method1() is called
    => sets _currentValue = 10;
 - Method2() is called
    => returns _currentValue = 10;

浏览器2:

- Method2() is called
    => returns _currentValue = 10;

实际上,值集是浏览器1是静态的,所以在浏览器2中
检索到相同的值.

我想要实现的是变量应该像每个请求的新实例(从每个浏览器调用时).在这种情况下我应该使用什么?会话?

解决方法

您将需要一些相关机制,因为您有两个完全不同的会话调用不同的方法.所以我建议使用两个呼叫者都知道的私钥.

我有点不可能知道那个密钥是什么,因为我无法从你的问题中收集任何东西,所以只有你知道,但简单的事实是你需要相关性.现在,一旦你确定他们可以使用什么,你就可以做这样的事情.

public class SessionState
{
    private Dictionary<string,int> Cache { get; set; }

    public SessionState()
    {
        this.Cache = new Dictionary<string,int>();
    }

    public void SetCachedValue(string key,int val)
    {
        if (!this.Cache.ContainsKey(key))
        {
            this.Cache.Add(key,val);
        }
        else
        {
            this.Cache[key] = val;
        }
    }

    public int GetCachedValue(string key)
    {
        if (!this.Cache.ContainsKey(key))
        {
            return -1;
        }

        return this.Cache[key];
    }
}

public class Service1
{
    private static sessionState = new SessionState();

    public void Method1(string privateKey)
    {
        sessionState.SetCachedValue(privateKey,{some integer value});
    }

    public int Method2(string privateKey)
    {
        return sessionState.GetCachedValue(privateKey);
    }
}

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...