我正在使用BreezeJS访问我的应用程序中的WCF Odata服务。它在本地计算机上访问服务时效果很好,但是当我尝试在我的开发Web服务器上针对服务运行应用程序时,它会失败。
我做的第一件事就是在服务响应中添加标头以允许跨源请求:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS, MERGE, DELETE, PUT
Access-Control-Allow-Headers: Content-Type, Accept, DataServiceVersion, MaxDataServiceVersion
另外,我将datajs请求设置为使用JSONP:
var oldClient = OData.defaultHttpClient;
var myClient = {
request: function (request, success, error) {
request.enableJsonpCallback = true;
return oldClient.request(request, success, error);
},
};
OData.defaultHttpClient = myClient;
我的微风设置是:
breeze.config.initializeAdapterInstance('dataService', 'odata', true);
this.dataService = new breeze.DataService({
serviceName: 'http://mydevserver/AirVision.Web.Site/AvDataService.svc/',
hasServerMetadata: true,
useJsonp: true,
});
this.manager = new breeze.EntityManager({ dataService: this.dataService });
主要是有效。但是,如果我尝试使用expand():
,它就会爆炸this.loadSites = function() {
var query = new breeze.EntityQuery().from("SourceSite")
.expand("SourceParameter")
;
return this.manager.executeQuery(query);
}
我从微风中得到错误:
"TypeError: undefined is not a function
at setNpValue (http://localhost/AirVision.Web.Site/Scripts/breeze.debug.js:5189:41)
at defaultPropertyInterceptor [as _$interceptor] (http://localhost/AirVision.Web.Site/Scripts/breeze.debug.js:4913:13)
at descr.set [as System] (http://localhost/AirVision.Web.Site/Scripts/breeze.debug.js:16161:22)
at protoFn.initializeEntityPrototype.proto.setProperty (http://localhost/AirVision.Web.Site/Scripts/breeze.debug.js:16034:32)
at updateRelatedEntity (http://localhost/AirVision.Web.Site/Scripts/breeze.debug.js:14774:26)
at mergeRelatedEntity (http://localhost/AirVision.Web.Site/Scripts/breeze.debug.js:14715:13)
at http://localhost/AirVision.Web.Site/Scripts/breeze.debug.js:14698:17
at Array.forEach (native)
at updateEntity (http://localhost/AirVision.Web.Site/Scripts/breeze.debug.js:14696:41)
at mergeEntity (http://localhost/AirVision.Web.Site/Scripts/breeze.debug.js:14667:13)"
我已经介入了breeze.debug.js,它归结为这一行:
var siblings = newValue.getProperty(inverseProp.name);
在该行上,newValue对象(表示我的一个数据实体)没有定义getProperty函数。
我是否需要在服务器端或javascript客户端上做些什么来解决这个问题?
谢谢!
答案 0 :(得分:0)
元数据可能无法正确定义您与SourceSite'的关系。到#SourceSrameter'。我在元数据出现问题之前遇到了这个错误,微风无法找到要将数据序列化的实体/关系。 我首先要确保你们之间的关系,以及实体' SourceParameter'就此而言,在服务器端breeze元数据中正确定义。