【问题标题】:Breeze query error, even though results returned微风查询错误,即使返回结果
【发布时间】:2016-03-04 17:12:42
【问题描述】:

Breeze 正在调用“fail()”函数,即使数据似乎是从 odata 服务返回的(以及在错误对象中)。有 5 个“事务”从 ODATA 服务返回(如在 Chrome 开发者工具中所见)以及传递给失败函数的错误对象的“数据”属性。

调用代码如下:

    function getTransactions() {
        var query = breeze.EntityQuery.from("Transactions")
                        .take(5);

        return entityManager.executeQuery(query,
            function(data) {
                log("transaction Query success!");
                var transactions = data.results;
            },
            function(err) {
                log("Query failed:" + err.message);
            });
    }

我不知道是什么问题导致了“fail()”。

定义了一个Transaction构造函数,代码如下:

   function registerTransactions(metadataStore) {
        metadataStore.registerEntityTypeCtor('Transaction', Transaction);

        // constructor -- empty
        function Transaction() { };

        Object.defineProperty(Transaction.prototype, 'itemCount', {
            get: function () {
                return 0;
            }
        });
    }

请注意,odata 资源的 url 是“Transactions”,但实体是 Transaction。调用“Fail()”函数的原因是什么?

Error.message = ";" 这没有多大帮助。

我相信我使用的是最新的 Breeze 1.4.11 和 datajs 1.1.2

【问题讨论】:

  • 注意:我删除了事务构造函数,没有影响。此外,我创建了一个全新的服务(相同的,asp.net odata)和一个新的控制器,具有不同的实体,但仍然存在相同的问题。我在响应中取回数据,但调用失败函数时没有错误消息。
  • 请展示您的微风配置...特别是您选择的“dataService”适配器以及您正在调用的 URL。还请具体说明您正在与之交谈的 OData 服务。它是 ASP.NET Web API 2 OData 服务吗? WCF OData 服务?我担心 DataJS 会给你带来痛苦……这意味着你要一直走下去,直到你看到它死去的地方(并隐藏失败)。
  • 我也在怀疑datajs——我唯一的微风配置是:
  • breeze.config.initializeAdapterInstances({ dataService: "odata" });我正在使用 asp.net webapi 2.1(说是 v5.1.2)ASP.NET Odata 服务 2.1(说是 5.1.2)。 url 是:localhost:49858/odata 正如我所提到的,它返回了正确的数据——一次调用 $metadata,然后调用看起来不错的资源 url (odata/transactions)。谢谢沃德!
  • 如果您想要 $batch 支持,请考虑使用“webApiOData”适配器而不是“odata”适配器。

标签: asp.net angularjs odata breeze


【解决方案1】:

经过大量研究,我发现问题在于服务端的另一个古怪的 CORS 设置。我能够通过针对同一服务直接访问 dataJS 并获得更多信息的错误消息来解决这个问题。

您在服务端必须做的事情是这样的:

var cors = new EnableCorsAttribute("*", "*", "*", "DataServiceVersion, MaxDataServiceVersion");

最后一个参数必须与服务在标头中发送 OData 版本有关,从而允许客户端确定它是否可以处理指定版本的 OData。

如果有人知道这方面的更多细节,请随时发表评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    • 2015-02-24
    • 2014-02-20
    • 1970-01-01
    相关资源
    最近更新 更多