将数据从JQuery发布到WCF OData服务

时间:2013-02-06 09:31:58

标签: jquery wcf-data-services odata put

我一直在打破这个问题,我无法发现问题。 我没有那么多WCF服务的经验,所以我希望它可能是我错过的简单。

我已经设置了这个WCF OData服务,公开了我们的实体模型:

    public static void InitializeService(DataServiceConfiguration config)
    {
        config.SetEntitySetAccessRule("*", EntitySetRights.All);
        config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
        config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2;
    }

现在我一直在使用jQuery访问该数据而没有问题,但是一旦我更新了我获取的jsonp-object,并将其返回给服务以更新数据库,我就得到了一个HTTP 501代码(未实施)。

这是我写的把对象放回服务的代码:

    function commitData() {
         $.ajax({
            url: 'http://localhost:7634/API/Service.svc/tbl_bericht_vertalingen/?$format=json&Authorization=' + userGuid,
            contentType: 'application/json',
            type: 'PUT',
            data: jsonObject,
            dataType: 'json',
            error: function () { alert("oops!"); },
            success: updateCallback
        }); 
    }

    function updateCallback(result) {
        var record = result["d"];
        alert("Updated on record with ID " + record.Id);
    }

jsonObject与我之前从服务中收到的对象相同,但有一些更新的属性。

如上所述,调用这一点jQuery会导致我从服务中获得“501 - Not Implemented”。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

听起来您的服务未配置为可更新。为了使您的服务支持更新,您必须提供IUpdatable(或IDataServiceUpdateProvider)的实现。

如果您使用实体框架作为提供商,那么这应该只是开箱即用。但是如果您使用的是反射提供程序,则需要自己实现此接口。提供此接口的最简单方法可能是在DataService中的“T”类上实现它。

有关详细信息,请查看以下文章:http://msdn.microsoft.com/en-us/data/gg191846.aspx(尝试搜索IUpdatable和IDataServiceUpdateProvider)或其他堆栈溢出问题:Any good sample for an updatable WCF Data Service implementation