0

HTTP 経由で WCF データ サービス (OData) への PUT 要求を実行できません。問題はIDです。自動生成されず、DB 設定を変更できません (この場合は許可されていません)。そのため、ID を送信しようとすると、正しい ID が送信されますが、正しいタイプは送信されません...

明らかに、サービスは ID に Int64 を期待しており、入力を解析できません。コードは次のとおりです。

 function OnCreateDisplay() {
     $('#DisplayInfoLoader').html('<span style="color: orange;">Creating object....</span>');
     $('#DisplayInfoLoader').fadeIn(1000);

     var url = "....";

     var r = new Object();
     r.DisplayID = NextDisplayID+"L";
     r.Name = $("#FDisplayName").val();
     r.Code = parseInt($("#FDisplayCode").val());
     r.Status = $("#FDisplayStatus").val();
     r.ProjectID = selected_project+"L";
     r.Description = $("#FDisplayDescription").val();
     jr = JSON.stringify(r);
     alert(jr);

     $.ajax({
         type: "PUT",
         url: url,
         data: jr,
         contentType: "application/json; charset=utf-8",
         success: function (result) {
             $('#DisplayInfoLoader').html('<span style="color: green;">Display created....</span>');
             $('#DisplayInfoLoader').fadeOut(3000);
         },
         error: function (xhr, ajaxOptions, thrownError) {
             alert(xhr.responseText);
             $('#DisplayInfoLoader').html('<span style="color: red;">An Error occured....</span>');
             $('#DisplayInfoLoader').fadeOut(3000);
         }
     });

     LoadProjectDisplays();

     return false;
 }

この関数NextDisplayID()は、最後に挿入された ID を取得してインクリメントするだけです。それは魅力のように機能します。その後に +"L" を追加しようとしましたが (WCF は長い間それを気に入っています...)、解析できません!

編集:

この JSON 文字列を送信しています:

{"DisplayID":"132L","Name":"Name","Code":"Code","Status":"0","ProjectID":"1L","Description":"Descr"}

この URL: "http://" + ip + ":8989/Service.svc/Displays("+NextDisplayID+"L)"

IP は lan-ip 192.168.0.191 です

また、コードをいじり続けると...「セグメント「ディスプレイ」のリソースが見つかりません」というメッセージが表示されることがあります。エラーとして

ヘッダーを挿入:

PUT /Service.svc/Displays(132L) HTTP/1.1

ホスト: 192.168.0.191:8989

接続: キープアライブ

コンテンツの長さ: 110

オリジン: http://192.168.0.191:8989

X-Requested-With: XMLHttpRequest

ユーザーエージェント: Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.11 (KHTML、Gecko など)

クローム/17.0.963.56 サファリ/535.11

コンテンツ タイプ: アプリケーション/json; 文字セット=UTF-8

受け入れる: /

リファラー: http://192.168.0.191:8989/

Accept-Encoding: gzip、deflate、sdch

Accept-Language: en-GB,nl;q=0.8

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

TEXT:DATA例 {"DisplayID":"132L","Name":"fdsafsda","Code":"dsafsda","Status":"0","ProjectID":"1L","Description":" fdsafsad"}

これを読むためのtnx

4

2 に答える 2

0

Int64 は文字列として記述された数値として JSON でシリアル化されます。たとえば、「12345」(引用符を含む)です。これについては、http ://www.odata.org/developers/protocols/json-format#PrimitiveTypes で説明されています。

これは、URL で使用される形式とは異なることに注意してください。形式は、数字の後に L が続きます (既に使用しています)。

POST と PUT は意味が異なります。

POST は新しいエンティティを作成するために使用され、エンティティ セットの URL に送信されるため、.../表示

PUT は既存のエンティティを更新するために使用され、エンティティ インスタンス URL (更新するエンティティ) に送信されるため、.../Displays(1234L) になります。また、キー プロパティ (この場合は DisplayID) の更新は通常許可されておらず、サーバーは PUT でクライアントから送信された値を無視する可能性があることに注意してください。そのため、PUT の場合はペイロードから除外できます。

于 2012-03-08T06:35:42.693 に答える
0

PUT の代わりに POST を使用してみてください... アイテムの作成にも使用できます。URL を調整する必要があるかもしれませんし、 DisplayID の有無にかかわらず送信してみてください。

于 2012-03-07T11:26:20.797 に答える