通过JSON将长(Int64)发送到WCF数据服务

时间:2012-03-07 08:57:32

标签: ajax json wcf odata int64

我无法通过HTTP向WCF数据服务(OData)执行PUT请求。问题是ID。它不是自动生成的,我无法更改数据库设置(在这种情况下不允许)。因此,当我尝试提交ID时,它会发送正确的ID但不是正确的类型...

显然,该服务需要一个Int64作为ID,并且无法解析我的输入。 这是代码:

 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"}

在此网址上:“http://”+ ip +“:8989 / Service.svc / Displays(”+ NextDisplayID +“L)”

IP是lan-ip 192.168.0.191

此外,当我继续玩代码时...我有时会得到“找不到资源'显示'的资源。”作为错误

PUT HEADER:

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

主持人:192.168.0.191:8989

连接:保持活力

内容长度:110

原产地:http://192.168.0.191:8989

X-Requested-With:XMLHttpRequest

User-Agent:Mozilla / 5.0(Windows NT 6.0)AppleWebKit / 535.11(KHTML,与Gecko一样)

Chrome / 17.0.963.56 Safari / 535.11

Content-Type:application / 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”, “名称”: “fdsafsda”, “代码”: “dsafsda”, “状态”: “0”, “专案编号”: “1L”, “描述”: “fdsafsad”} < / p>

tnx阅读本文

2 个答案:

答案 0 :(得分:0)

尝试使用POST代替PUT ...因为它也用于创建项目。您可能需要调整URL并尝试使用或不使用DisplayID进行发送?

答案 1 :(得分:0)

Int64在JSON中序列化为写为字符串的数字。例如“12345”(包括引号)。这在此处描述:http://www.odata.org/developers/protocols/json-format#PrimitiveTypes

请注意,它与URL中使用的格式不同,其中格式是后跟L(您已经使用过)的数字。

对于POST与PUT,它们有不同的含义。

POST用于创建新实体,并发送到实体集URL,因此...... / Displays

PUT用于更新现有实体,并发送到实体实例URL(您要更新的实体),所以...... / Displays(1234L)。 另请注意,通常不允许更新密钥属性(在您的情况下为DisplayID),并且服务器可能会忽略您在PUT中从客户端发送的值。所以你可以在PUT的情况下将它从有效载荷中分离出来。