Wcf data services 无法分析包含根属性“0”的odata json响应;d";使用wcf客户端服务5.3生成器

Wcf data services 无法分析包含根属性“0”的odata json响应;d";使用wcf客户端服务5.3生成器,wcf-data-services,odata,jaydata,Wcf Data Services,Odata,Jaydata,我开始这个新的帖子,作为以下评论的延续: 我面临的问题是,我已经按照线程中的建议升级到wcf data services 5.5和wcf client tools 5.3。我正在尝试向以下JayStorm服务执行一个简单的post: 我在.Net中生成了客户端服务引用,正在运行以下代码: using Microsoft.Data.Edm; using Microsoft.Data.Edm.Csdl; using Microsoft.Data.Edm.Validation; using Micr

我开始这个新的帖子,作为以下评论的延续:

我面临的问题是,我已经按照线程中的建议升级到wcf data services 5.5和wcf client tools 5.3。我正在尝试向以下JayStorm服务执行一个简单的post:

我在.Net中生成了客户端服务引用,正在运行以下代码:

using Microsoft.Data.Edm;
using Microsoft.Data.Edm.Csdl;
using Microsoft.Data.Edm.Validation;
using Microsoft.Data.OData;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Spatial;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

namespace AirportDBDataImporter
{
    class Program
    {
        static void Main(string[] args)
        {
            var url = "https://open.jaystack.net/c72e6c4b-27ba-49bb-9321-e167ed03d00b/6494690e-1d5f-418d-adca-0ac515b7b742/api/mydatabase/";
            var db = new AirportDB.mydatabaseService(new Uri(url));
            var xmlTextReader = new XmlTextReader(url+"$metadata");
            IEdmModel edmModel = null;
            IEnumerable<EdmError> errors = null;
            if (EdmxReader.TryParse(xmlTextReader, out edmModel, out errors))
            {

            }

            db.Format.UseJson(edmModel);

            //{"Name":"sfd","Abbrev":"sd","GeoLocation":{"type":"Point","coordinates":[-71.56236648559569,42.451074707889646],"crs":{"properties":{"name":"EPSG:4326"},"type":"name"}}}
            var airport = new AirportDB.Airport();
            airport.Abbrev = "Foo";
            airport.Name = "Bar";

            airport.GeoLocation = GeographyPoint.Create(51.87796, -176.64603);
            db.AddToAirport(airport);

            db.SaveChanges();

            //var foo = db.Airport.ToList();


        }
    }
}
以下是来自fiddler的响应原始数据:

POST https://open.jaystack.net/c72e6c4b-27ba-49bb-9321-e167ed03d00b/6494690e-1d5f-418d-adca-0ac515b7b742/api/mydatabase/Airport HTTP/1.1
DataServiceVersion: 3.0;NetFx
MaxDataServiceVersion: 3.0;NetFx
Content-Type: application/json;odata=minimalmetadata
Accept: application/json;odata=minimalmetadata
Accept-Charset: UTF-8
User-Agent: Microsoft ADO.NET Data Services
Host: open.jaystack.net
Content-Length: 196
Expect: 100-continue

{"odata.type":"mydatabase.Airport","Abbrev":"Foo","GeoLocation":{"type":"Point","coordinates":[-176.64603,51.87796],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}},"id":null,"Name":"Bar"}
HTTP/1.1 201 Created
Server: nginx/1.4.1
Date: Fri, 21 Jun 2013 15:07:40 GMT
Content-Type: application/json;odata=verbose;charset=utf-8;charset=UTF-8
Content-Length: 574
Connection: keep-alive
X-Powered-By: Express
Access-Control-Allow-Origin: open.jaystack.net
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type, MaxDataServiceVersion, DataServiceVersion, Authorization, X-Domain, X-Requested-With
Access-Control-Allow-Method: POST
Access-Control-Allow-Methods: OPTIONS, GET, HEAD, POST, MERGE, PATCH, DELETE, PUT
Access-Control-Allow-Credentials: true
location: https://open.jaystack.net/c72e6c4b-27ba-49bb-9321-e167ed03d00b/6494690e-1d5f-418d-adca-0ac515b7b742/api/mydatabase/Airport('NTFjNDZjM2MyMjg1Y2FiNjMzMDAwMDAx')
Set-Cookie: connect.sid=s%3AvwHQXjoJQO3VUxJdE2jrQ3ja.A4tG9Bv4XTg1gS5xAVgxMyWXJYrV6DULf3xWvj1Uhq8; Path=/; HttpOnly

{"d":{"__metadata":{"type":"mydatabase.Airport","id":"https://open.jaystack.net/c72e6c4b-27ba-49bb-9321-e167ed03d00b/6494690e-1d5f-418d-adca-0ac515b7b742/api/mydatabase/Airport('NTFjNDZjM2MyMjg1Y2FiNjMzMDAwMDAx')","uri":"https://open.jaystack.net/c72e6c4b-27ba-49bb-9321-e167ed03d00b/6494690e-1d5f-418d-adca-0ac515b7b742/api/mydatabase/Airport('NTFjNDZjM2MyMjg1Y2FiNjMzMDAwMDAx')"},"Name":"Bar","Abbrev":"Foo","GeoLocation":{"type":"Point","coordinates":[-176.64603,51.87796],"crs":{"properties":{"name":"EPSG:4326"},"type":"name"}},"id":"NTFjNDZjM2MyMjg1Y2FiNjMzMDAwMDAx"}}

谢谢

正如在另一个线程的评论中所讨论的,您的服务器不支持OData的V3,而且在您请求新的JSON格式时,它似乎也没有相应地出现故障。在请求负载中,您说您只理解
application/json;odata=minimalmetadata
,但服务器忽略了
odata=minimalmetadata
约束,并使用
application/json进行响应;odata=verbose
无论如何

您是否控制服务器?我将研究如何将其升级到OData的v3

正如您已经指出的,WCF数据服务客户端不能使用JSON详细信息。问题不仅仅在于“d”包装器;这两种格式之间有很多不同之处,WCF DS客户端根本无法理解旧格式(而且永远也无法理解)


如果可能的话,我强烈建议升级服务器。如果您不能升级服务器,您仍然可以将Atom与WCF数据服务客户端和v2服务器一起使用。这意味着网络上会有更多的字节,但如果你关心的是减少网络上的有效负载大小,那就更有理由升级服务器并使用新的JSON格式,这比旧格式简洁得多。

我猜服务响应的DataServiceVersion和Content-Type头是错误的或没有。但是为了确认这一点,您可以从服务获取包括HTTP头的响应并将其发布到这里吗?我对问题进行了内联编辑,以包含post请求和响应原始数据(包括头)。