OperationContext.Current.SessionId становится нулевым

Когда я вызываю службу GetSessionId(), идентификатор сеанса получает нулевое значение. Пожалуйста, помогите мне решить эту проблему..

public Response<string> GetSessionId()
{
    Response<string> respn = new Response<string>();
    respn.Succeeded = false;

    try
    {
        _sessionId = OperationContext.Current.SessionId;
        respn.ReturnData = _sessionId;
        respn.Succeeded = true;
    }
    catch (Exception ex)
    {
        respn.Succeeded = false;
        respn.ErrorMsg = ex.Message;
    }
    return respn;
}

В файле Web.Config, если я установил режим безопасности = "Сообщение" и clientCredentialType = "Windows", в этом случае он получит идентификатор сеанса. Но я не могу использовать какую-либо безопасность.

<wsHttpBinding>
    <binding name="SOAPService_EndpointBinding"
             maxReceivedMessageSize="2147483647"
             openTimeout="00:02:00"
             closeTimeout="00:02:00"
             sendTimeout="24:00:00"
             receiveTimeout="24:00:00">          
      <security mode="None">
        <message clientCredentialType="None"/>
      </security>
    </binding>
  </wsHttpBinding>

person Neo    schedule 06.06.2016    source источник
comment
IIRC идентификатор сеанса касается не безопасности, а привязки с включенным сеансом. См. здесь возможный ответ.   -  person Christian.K    schedule 06.06.2016
comment
Проблема была решена, я добавил ‹reliableSession enabled=true/› и ServiceContract установил значение SessionMode.Required.   -  person Neo    schedule 08.06.2016


Ответы (2)


Какую привязку вы используете? Сеанс поддерживается со следующей привязкой

  • NetTcpBinding
  • NetNamedPipeBinding
  • WSHttpBinding (только если включена безопасность или надежность)
person Sandeep Saran    schedule 07.06.2016
comment
Я использую WSHttpBinding. Проблема была решена, я добавил ‹reliableSession enabled=true/› и ServiceContract установил значение SessionMode.Required. - person Neo; 08.06.2016

Решение выглядит следующим образом:

В интерфейсе контракта установите для атрибута SessionMode значение Required.

[ServiceContract(SessionMode = SessionMode.Required)]

Включил для параметра trustSession значение true в файле конфигурации

<wsHttpBinding>
    <binding name="SOAPService_EndpointBinding"
             maxReceivedMessageSize="2147483647"
             openTimeout="00:02:00"
             closeTimeout="00:02:00"
             sendTimeout="24:00:00"
             receiveTimeout="24:00:00">          
      <security mode="None">
        <message clientCredentialType="None"/>
      </security>
      <reliableSession enabled="true"/>
    </binding>
  </wsHttpBinding>
person Neo    schedule 08.06.2016