2009-03-11 7 views
0

JQueryを使ってajax呼び出しを行っているときにNHibernateを使用して問題が発生しました。 「リーダーがクローズされたときに読む呼び出すために無効な試み」NHibernate connection/readerがajaxコンテキストからクローズされました

は私が接続またはリーダーのどちらかに関するさまざまな例外は次のように閉鎖されている取得します。

これを修正する方法を知っている人はいますか?

+0

jQueryからnHibernateにアクセスするには "jnHibernate"を使用しますか、またはそれらの間に何かがありますか? (wcf、wse、generic handler、webmethod、...) – ybo

答えて

0

接続を正しく初期化していて、何かを読み込もうとする前に.NETから閉じていないことを確認してください。

まだ開いていない、または既に閉じている間に情報を取得しようとしているようです。

最後に、他のフレームワークやXMLHttpRequestオブジェクトを直接使用する前に、アプリでAJAXをいくつか試してみましたか?そうでない場合は、試してみてください。それでも問題が解決しない場合は、サーバー側で問題が発生している可能性があります。

+0

ajaxを使用して呼び出していないときに呼び出しが完全に機能するので、ajaxを使用するときにこれがなぜ違うのかを知っていて、 私は自分自身の接続をハンドリングしていませんし、吸うように私のアヤックスはうまく動作します - それはNHibernateの問題です。 –

+0

エラーメッセージから、セッションが既に閉じられた後に読み込みを試みる必要があるように聞こえるので、コード内の仮定を確認してください。パラメータが(たとえば)異なる場合、AJAX呼び出しでページのコンテキストが異なる場合があります。いくつかのコードと詳細情報が役に立つでしょう。 :) –

0

まあ呼び出しは同じパラメータで行われ、私は本当にあなたを見ることができるすべては、ユーザー名==名前で従業員を取得するための基本的なLINQのNHibernateのへの呼び出しです - 。名前が渡されたのparamである

したがって、それはちょうどです:

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

それはJQuery.getJSON

を使用してCALLDされるアクションから呼び出され刚性私も同じようなものです他の呼び出しを持っている、と彼らはまたようで、私はこの行にブレークポイントを持っていたし、それが完璧に動作しますこの文脈で失敗する。

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)); 
    } 
}