2009-03-11 3 views
0

У меня возникли проблемы с использованием NHibernate, когда я делаю вызовы ajax с использованием JQuery.NHibernate connection/reader закрыт из контекста ajax

я получаю различные исключения, касающиеся либо соединение или читатель закрываются, как:

«Invalid попытки вызвать Read, когда читатель закрыт».

Кто-нибудь знает, как это исправить?

+0

Вы используете «jnHibernate» для доступа к nHibernate из jQuery или есть что-то между ними? (wcf, wse, generic handler, webmethod, ...) – ybo

ответ

0

Проверьте, правильно ли вы инициализируете свое соединение и не закрываете его с .NET, прежде чем пытаться что-то прочитать.

Кажется, вы пытаетесь получить информацию, пока она еще не открыта, или вы ее уже закрыли.

И, наконец, вы пытались сделать некоторые AJAX с вашим приложением раньше, используя другие фреймворки или объект XMLHttpRequest напрямую? Если нет, попробуйте. Если проблема все еще сохраняется, вы можете быть уверены, что проблема на стороне сервера.

+0

Звонок отлично работает, когда я не звоню с помощью ajax - так что вопрос в том, кто-то знает, почему это происходит при использовании ajax и что с ним делать. Я не обрабатываю свои связи сам, а мой аякс, как сосать, работает просто отлично - проблема с NHibernate в контексте ajax кажется. – 2009-03-11 13:24:38

+0

Из сообщения об ошибке кажется, что нужно попытаться прочитать после того, как сессия уже закрыта, поэтому проверьте свои предположения в коде. Контекст страницы может отличаться в вызове AJAX, если параметры (например) различны. Некоторый код и дополнительная информация были бы полезны. :) –

0

Ну вызов делаются с тем же параметром, и все, что я могу действительно показать вам, является одним из основной Linq для NHibernate вызова, чтобы получить сотрудник по имени пользователя == имени -. Где имя является пары передаются в

Так что это просто:

return Session.Linq(). Single (e => e == "John");

я имел точку останова на этой линии, и она прекрасно работает, пока она вызывается из действия, которое calld с помощью JQuery.getJSON

У меня также есть другие вызовы, которые являются такими же рода, и они также, кажется, чтобы потерпеть неудачу в этом контексте.

0
protected object GetJsonUserWrong(string name) { 
    var user = default(User); 
    using(var session = this.SessionFactory.Open()) { 
     user = session.Linq<User>().Single(e => e.Name == name); 
    } 
    //doing the serialization while the session is closed might not work 
    //if NHibernate is using proxy objects, this can fail. 
    return SerializeToJson(user); 
} 

protected object GetJsonUserRight(string name) { 
    using(var session = this.SessionFactory.Open()) { 
     //must do the serialization while the session is open 
     return SerializeToJson(session.Linq<user>().Single(e => e.Name == name)); 
    } 
} 
Смежные вопросы