Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Global Variable between two WCF Methods

Tags:

c#

wcf

I have two Methods in a WCF Service say

Method1()
{
 _currentValue = 10;
}

Method2()
{
return _currentValue;
}

I have a situation in which, i need to set a value in Method1() and read it in Method2().

I tried using static variable like public static int _currentValue, i could able to read the value set in Method1() in Method2().

But the issue is, i want this variable to react like separate instance variable for each request made. i.e., right now below is the problem

Browser 1 :

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

Browser 2:

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

Actually the value set is Browser 1 is static, so in Browser 2 the same value is retrieved.

What i am trying to implement is the variable should act like a new instance for each request made (when calling from each browser). What should i use in this case? a session?

like image 460
balanv Avatar asked Sep 18 '12 11:09

balanv


1 Answers

You're going to need some mechanism for correlation because you have two completely different sessions calling into different methods. So I would recommend using a private key that both callers know.

It is a bit impossible for me to know what that key can be because I can't really gather anything from your question, so only you know that, but the simple fact is you're going to need correlation. Now, once you determine what they can use you can do something like this.

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);
    }
}
like image 73
Mike Perrenoud Avatar answered Sep 30 '22 21:09

Mike Perrenoud