2014-08-29 3 views
1

저는 Person 객체를 얻고 List를 반환하는 일반 wcf 서비스를 만들고 있습니다. 들어오는 Person 객체를 세션에 저장하고 목록을 반환해야합니다. 아래 코드를 구현했습니다.WCF 서비스의 세션 변수

[AspNetCompatibilityRequirements(RequirementsMode= AspNetCompatibilityRequirementsMode.Required)] 
public class Service1 : IService1 
{ 
    public List<Person> getPerson(Person person) 
    { 
     List<Person> persons; 
     if (HttpContext.Current.Session["personList"] != null) 
     { 
      persons = (List<Person>)HttpContext.Current.Session["personList"]; 
     } 
     else 
     { 
      persons = new List<Person>(); 
     } 
     persons.Add(person); 
     HttpContext.Current.Session["personList"] = persons; 

     return persons; 
    } 
} 

하지만 항상 매개 변수로 전달 된 객체 만 있습니다. 전체 컬렉션이 아닙니다. 그래서 항상 session은 null을 반환합니다. 나는 무엇을 놓쳤는가?

답변

2

응답이 반환 된 직후 현재 세션의 범위가 끝납니다. 세션 관리자 클래스를 만들어야합니다. 아래의 작업 코드를 참조하십시오 : -

[AspNetCompatibilityRequirements(RequirementsMode= AspNetCompatibilityRequirementsMode.Required)] 
    public class Service1 : IService1 
    { 
     public List<Person> getPerson(Person person) 
     { 
      SessionManager.PersonCollectionSetter = person; 
      return SessionManager.PersonCollectionGetter; 
     } 
    } 
    public static class SessionManager 
    { 
     private static List<Person> m_PersonCollection = new List<Person>(); 
     public static Person PersonCollectionSetter 
     { 
      set 
      { 
       m_PersonCollection.Add(value); 
      } 
     } 

     public static List<Person> PersonCollectionGetter 
     { 
      get 
      { 
       return m_PersonCollection; 
      } 
     } 
    } 
0

귀하의 서비스 계약이

ServiceContract(SessionMode=SessionMode.Required) 

그러나 다음과 같은 장식품이 필요, 당신은 단지를 통해 세션 상태를 유지할 수 있습니다 않는 확보 binding 같은 wsHttpBinding