1

Optimistic ConcurrencyException が正しく返されません。これを、そよ風の ToDo サンプルと自分のアプリでテストしました。

これは、OptimisticConcurrencyException を引き起こした場合に返されるものです。

{"$id":"1","$type":"System.Web.Http.HttpError, System.Web.Http","Message":"An error has occurred."}

ExceptionType がありません。VS のデバッグ モードでは、これは正しく機能します。

4

2 に答える 2

1

うーん...、テストケースで同時実行例外を試みたとき。

// assuming this causes a concurrency exception
em.saveChanges().then(

).fail(function(error) {
   // error object detailed below        
})

「エラー」パラメーターで次のものが返されます

error.message: "Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries."

error.responseText:    {"$id":"1","$type":"System.Web.Http.HttpError, System.Web.Http","Message":"An error has occurred.","ExceptionMessage":"Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.","ExceptionType":"System.Data.OptimisticConcurrencyException","StackTrace":"   at System.Data.Mapping.Update.Internal.UpdateTranslator.ValidateRowsAffected(Int64 <... more here ...> }

error.detail:  < an even more detailed error object
error.detail.ExceptionType: "System.Data.OptimisticConcurrencyException"

他にもプロパティはありますが、これらは重要なものです。

私たちは何が違うのだろうか?

于 2012-12-14T18:19:57.507 に答える
1

@sascha - <customErrors>IIS で実行している場合に問題なく動作することについて、あなたは私を打ち負かしました ( Web APIを自己ホストする数少ない人の 1 人である場合は、 Jimmy Bogard の代替案を参照してください)。

しかし、最終的にそれを行うのは間違っていると確信しています。今のところは便利ですが、Jimmy が投稿で述べているように、「本番環境では必要ない可能性があります」。アプリは、オプティミスティック コンカレンシーや検証エラーなどの日常的な処理のために、フィルター処理されていない例外をクライアントに公開するべきではありません。

here で説明されているように、おそらくHttpResponseException を含む、より良いアプローチを見つけるつもりです。制御された方法で未処理の例外を処理するための「カスタム例外フィルター」を強く検討します。

そのアプローチは Breeze 自体に属するものではないと思います。アプリケーション固有のソリューションが必要であると思います...どの例外を公開し、どのように表現する必要があるかを知っているソリューションです。しかし、メカニズムは教えるのに良いでしょう。その方法を理解したら、独自のカスタム例外処理を展開し、Web.config をそのままにしておくことができます。

このガイダンスをすぐに書きたいと思っています。気軽に打ち負かしてください:)

于 2012-12-15T00:03:58.700 に答える