1

MSDNにクロスポストされました。

ローカル ストレージ サービスのテーブルに挿入しようとしているエンティティ オブジェクトのリストがあります。SampleClient の TableStorageDataContext クラスから派生したデータ コンテキスト クラスを使用して、新しいコンテキスト オブジェクトを作成し、問題なくエンティティを追加します。context.SaveChanges() を呼び出すと、最終的に例外がスローされますが、詳細はほとんどありません。エラーがそこで発生したかどうかを確認するために SQL Server Express でプロファイラー トレースを実行しましたが、有用なものは何も見つかりませんでした。これにより、ローカル ストレージ サービスに何らかの問題があり、デバッグ方法がわかりません。

クライアント コード (F#) は次のとおりです。

let cxt0 = new WebRole.Models.TableDataContext()
entityList |> Seq.iter (fun n -> cxt0.AddObject("NutritionData", n))
let results = cxt0.SaveChanges()

上記の行の最後の行にブレークポイントを設定して実行を停止し、cxt0 オブジェクトに追加するすべてのエンティティ (>500K) が含まれていることを確認できます。その後、実行を継続すると、次の例外がスローされます。

System.Data.Services.Client.DataServiceRequestException: "この要求の処理中にエラーが発生しました。"

System.Data.Services.Client.DataServiceContext.SaveAsyncResult.HandleBatchResponse() で System.Data.Services.Client.DataServiceContext.SaveAsyncResult.EndRequest() で System.Data.Services.Client.DataServiceContext.SaveChanges (SaveChangesOptions オプション) で システムで.Data.Services.Client.DataServiceContext.SaveChanges() at WorkerRole.SrDataProcessor.importSrData(FastFunc`2 pf, String blobName) in C:\Users\Ben\Development\Projects\CloudProject\WorkerRole\SrDataProcessor.fs:line 76

InnerException (html タグのスクラバーを避けるため、角かっこはご容赦ください):

System.Data.Services.Client.DataServiceClientException: " [?xml バージョン="1.0" エンコーディング="utf-8" スタンドアロン="はい"?] [エラー xmlns="http://schemas.microsoft.com/ado/ 2007/08/dataservices/metadata"] [code][/code] [message xml:lang="en-US"]このリクエストの処理中にエラーが発生しました.[/message] [/error] "

System.Data.Services.Client.DataServiceContext.SaveAsyncResult.d__1d.MoveNext() で

HandleBatchResponse メソッドでは、応答を列挙するときにこのエラーが報告される可能性があるようです。これを何と呼んでいるのか、何かアイデアはありますか?チェックしようと思ったのにまだ行っていない唯一のことは、1000 文字を超える文字列プロパティを持つエンティティがないことを確認することです。

更新:今、私は持っていますが、何もないようです。次のスニペットでは、空のシーケンスが生成されました。

let longEntities = 
    nutData |> Seq.choose (fun nd -> if HasLongStringProperties(nd)
                                     then Some(nd) else None)

また、より一般的には、このような問題をどのようにデバッグしますか? ローカル ストレージ サービスにイントロスペクションを取得する方法はありますか?

更新 2 :「起源の例外」は、いわば、実際には「内部サーバー エラー (500)」を報告する System.WebException であり、それ以上の詳細がないことを発見しました。挿入しようとしているデータが、テーブル サービスをサポートする SQL Server Express データベース内のテーブルのスキーマおよびデータ型と互換性があることを確認するために、知っていることはすべて実行しましたが、まだ何がわかりません。問題はです。TableDataService は、挿入しようとしているオブジェクトを受け入れません。詳細については、MSDN スレッドを参照してください。connect のバグも開きました。

4

1 に答える 1

2

私は非常に単純なデモをしようとしていましたが、同じ問題がありましたが、最終的にそれを理解することができました. ログをオンにして開発ストレージに対して実行する: http://blogs.msdn.com/b/partlycloudy/archive/2009/12/16/development-storage-logging.aspxを参照してください。

DevelopmentStorage を開始し、アプリを実行した後、開発ストレージを停止してログ フォルダーを確認すると、次のように表示されます。

2010 年 9 月 17 日 1:30:47 PM [エラー] テーブル操作と再スローの実行中に例外がキャッチされました: System.Exception: c:\Users\Scott\AppData\Local\Temp\jvcl5gjz.0.cs(14,23) : エラー CS0542: 'Number': メンバー名は、それを囲む型と同じにすることはできません

x:\rd\rd_store_stable\services\xstore\XFE\table\service\Protocols\REST\src\TableManager の Microsoft.Cis.Services.Nephos.Table.Service.Protocols.Rest.TableManager.EndPerformOperation (IAsyncResult ar) にあります。 x:\rd\rd_store_stable\services\xstore\XFE\table\service\Protocols\REST\ の Microsoft.Cis.Services.Nephos.Table.Service.Protocols.Rest.TableProtocolHead.d__3e.MoveNext() の cs:184 行目src\TableProtocolHead.cs:732行目

Number という単一の列を持つ Number というテーブルを作成したため、私のデモは単純すぎることがわかりました...

于 2010-09-17T20:50:34.587 に答える