Question

I am having trouble in configuring WCF service to run in session mode. As a test I wrote this simple service :

[ServiceContract]
public interface IService1
{
    [OperationContract]
    string AddData(int value);
}

[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession)]
internal class Service1 : IService1,IDisposable
{
    private int acc;

    public Service1()
    {
        acc = 0;
    }

    public string AddData(int value)
    {
        acc += value;
        return string.Format("Accumulator value: {0}", acc);
    }

    #region IDisposable Members

    public void Dispose()
    {           
    }

    #endregion
}

I am using Net.TCP binding with default configuration with reliable session flag enabled. As far as I understand , such service should run with no problems in session mode. But , the service runs as in per call mode - each time I call AddData , constructor gets called before executing AddData and Dispose() is called after the call. Any ideas why this might be happening? Perhaps I am missing something?

note : I do not know if it is related , but I am using VS2008 to run this.

Update: I've noticed here that wcftestclient does not maintain session with clients - maybe it was my problem. Indeed that was the problem. Connecting to the service from simple console client confirmed that the service works as it should.

Was it helpful?

Solution

Try requiring a SessionMode when defining the ServiceContract:

[ServiceContract(SessionMode = SessionMode.Required)]
public interface IService1
{
  [OperationContract]
  string AddData(int value);
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top