Я пытаюсь настроить сеанс в Active Record для каждого запроса WCF. Вот код:
[WebGet(UriTemplate = "ReadMessages?authUserId={authUserId}&authGuid={authGuid}&userId={userId}&lastMessageId={lastMessageId}&startDate={startDate}&endDate={endDate}")]
public IQueryable<Message> ReadMessages(int authUserId, string authGuid, uint userId, uint lastMessageId,
DateTime startDate, DateTime endDate)
{
UserUtility.Authenticate(authUserId, authGuid);
using (new SessionScope())
{
//get messages.
return from m in MessageData.FindAll(userId, lastMessageId, startDate, endDate)
select ConvertToView(m);
}
}
Несмотря на то, что у меня есть блок SessionScope, использующий блок, он все равно дает мне ошибку отложенной загрузки, потому что он возвращает IQueryable и поэтому он конвертируется в представление, которое запускает отложенную загрузку после того, как он выходит из блока использования, который я предполагаю. Вот ошибка:
Initializing [xxx.Business.Schemas.CommonSchemas.Models.Messaging.Message # 6575] - не удалось лениво инициализировать коллекцию ролей: xxx.Business.Schemas.CommonSchemas.Models.Messaging.Message.MessageStatusHistories, без сеанса или сессия была закрыта
В моей конфигурации IsRunningWebApp имеет значение true.
var source = new InPlaceConfigurationSource();
source.IsRunningInWebApp = true;
Если вам интересно, почему я возвращаю IQueryable из веб-метода WCF, то это потому, что я использую веб-API WCF (http://wcf.codeplex.com/wikipage?title=WCF%20HTTP),, который позволяет запрашивать ваши объекты в строке запроса url с использованием ODATA.
Что я делаю не так? Как создать сеанс, который длится достаточно долго, чтобы лениво загружать модели при преобразовании их в представления по возвращении из веб-методов?