繁体   English   中英

Breeze.js返回错误'; '(分号+空格)

[英]Breeze.js returns an error of '; ' (semicolon + space)

昨天我的Breeze代码正在使用我的WCF数据服务。

那么今天,它就停止了工作! 当我运行查询时,我收到错误消息'; 来自微风的'(一个分号和一个空格)。

错误对象中的其他所有内容看起来都很正常(我是微风的新手,因此可能有一些我不知道的东西)。

知道是什么原因引起的吗?

更新:

当我在调试器中运行我的WCF数据服务时(在我的机器上)一切正常! 但是当我在服务器上托管它时,我得到了上述错误。

我唯一能想到的是跨域的东西不能正常工作。 这是我的跨域代码:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    EnableCrossDomain();
}

static void EnableCrossDomain()
{
    string origin = HttpContext.Current.Request.Headers["Origin"];
    if (string.IsNullOrEmpty(origin)) return;
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", origin);
    string method = HttpContext.Current.Request.Headers["Access-Control-Request-Method"];
    if (!string.IsNullOrEmpty(method))
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", method);
    string headers = HttpContext.Current.Request.Headers["Access-Control-Request-Headers"];
    if (!string.IsNullOrEmpty(headers))
        HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", headers);
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");
    if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
    {
        HttpContext.Current.Response.StatusCode = 204;
        HttpContext.Current.Response.End();
    }
}

这是我如何调用它的一个例子:

function getBags() {

    var bags;
    var query = breeze.EntityQuery.from('Bags');

    return manager.executeQuery(query).then(querySucceded, _queryFailed);

    function querySucceded(data) {
        bags = data.result;
        logSuccess("Retrieved Bag Data")
        return bags;
    }
}

function _queryFailed(error) {
    logError(config.appErrorPrefix + "Query Failed: " + error.message);
    throw error;
}

有没有更好的方法允许使用Breeze和WCF数据服务进行跨域调用?

我遇到了类似的问题,收到“;”错误消息,我也在使用CORS。 在尝试为您的响应找到正确的处理程序时,Breeze会收到错误。 它没有在返回的头文件中获取“DataServiceVersion”的值,而Breeze在response.body.message中查找错误消息,但这是空的,因此您只能获得“;”。 理想情况下,此错误报告应该有一些友好的文本告诉您正文消息是空的或不存在。

我的修复是在他的回答中使用Ward提供的链接使用Mike Wasson CORS设置。 我以前一直在使用Breeze提供的ToDo应用程序示例中使用的SimpleCorsHandler.cs类,但是没有在OPTIONS请求的“Access-Control-Allow-Headers”标头值中返回“DataServiceVersion”。 我不确定我是否可以配置SimpleCorsHandler来解决这个问题; 删除SimpleCorsHandler并在WebApiConfig.cs的Register方法中使用这两行是eaiser:

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

(有关参数的更多信息,请参阅EnableCorsAttribute文档;对于第一个使用“*”不是一个好主意,但这只是一个示例。)Breeze仍然为每个服务调用运行OPTIONS请求,然后执行GET请求,具体取决于OPTIONS响应现在包括允许DataServiceVersion标头。 GET请求获取DataServiceVersion标头(我的值为3.0),错误消失。

按照@Guilherme的建议,我会看到意想不到的缩小和丢失的分号; 除了logSuccess之外,你可能还有其他人。

请查看“ 调试查询结果之谜 ”中的步骤,特别注意实际通过线路传输的内容; 浏览器工具或Fiddler可能在这里提供帮助。

您实施CORS的努力不太可能是原因,但这是可能的。 您是否在调用之前检查了Response的内容.End() 当然,您始终可以从提交向后工作到代码工作的时间点。 您正在使用版本控制,是吗?

我认为你已经消除了你的BreezeJS代码副本在“昨天和今天”之间发生变化的可能性。

CORS

请重新考虑您的手动CORS工作。 Web API v.2提供了一个由Mike Wasson很好描述的CORS工具。 你知道吗? 如果是这样,有没有理由你没有使用它(因为它似乎你没有使用它)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM