Pergunta

Estou tendo problemas em configurar o serviço WCF para executar no modo de sessão. Como teste, escrevi este serviço simples:

[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
}

Estou usando a ligação net.tcp com a configuração padrão com o sinalizador de sessão confiável ativado. Até onde eu entendo, esse serviço deve ser executado sem problemas no modo de sessão. Mas, o serviço é executado como no modo de chamada - cada vez que eu chamo AddData, o construtor é chamado antes de executar o addData e o descarte () é chamado após a chamada. Alguma idéia de por que isso pode estar acontecendo? Talvez eu esteja perdendo alguma coisa?

Nota: Não sei se está relacionado, mas estou usando o VS2008 para executar isso.

Atualização: Eu notei aqui Esse wcftestclient não mantém a sessão com os clientes - talvez tenha sido o meu problema. Na verdade, esse era o problema. Conectar -se ao serviço do cliente simples do console confirmou que o serviço funciona como deveria.

Foi útil?

Solução

Tente exigir um modo de sessão ao definir o ServiceContract:

[ServiceContract(SessionMode = SessionMode.Required)]
public interface IService1
{
  [OperationContract]
  string AddData(int value);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top