我只是创建一个普通的wcf服务,它获取Person对象并返回List。我需要在会话中保存传入的Person对象并返回列表。我已经实现了如下代码
[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。我错过了什么?
答案 0 :(得分:1)
返回响应后,当前会话的范围立即生效。 您需要创建一个会话管理器类。 请参阅下面的工作代码: -
[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;
}
}
}
答案 1 :(得分:0)
您的服务合同需要以下装饰
ServiceContract(SessionMode=SessionMode.Required)
但请注意,您只能通过binding
wsHttpBinding
维护会话状态