2014-08-29 86 views
1

我只是創建一個普通的wcf服務,它獲取Person對象並返回List。我需要將傳入的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; 
    } 
} 

但是我總是隻得到了傳入參數的對象。不是整個集合。所以總是會話返回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) 

然而,也請注意,您只能通過維持會話狀態的保護,如bindingwsHttpBinding