Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Cordova手机应用程序保存更改的Breeze Web API_Breeze - Fatal编程技术网

使用Cordova手机应用程序保存更改的Breeze Web API

使用Cordova手机应用程序保存更改的Breeze Web API,breeze,Breeze,我创建了一个ASP.NETMVC4WebAPI项目,并通过NuGet安装了Breeze,包括客户端示例,ToDo应用程序运行得非常好。我还通过Android平板电脑上的Cordova运行该应用程序,调用WebAPI,除了保存实体外,它的效果也非常好。为了支持跨域操作,我对Global.asax(“Access Control Allow Origin”(“*”)进行了适当的更改 当Android客户端调用其saveChanges()时,数据实际上被保存到数据库中,但它的失败承诺总是在客户端触发

我创建了一个ASP.NETMVC4WebAPI项目,并通过NuGet安装了Breeze,包括客户端示例,ToDo应用程序运行得非常好。我还通过Android平板电脑上的Cordova运行该应用程序,调用WebAPI,除了保存实体外,它的效果也非常好。为了支持跨域操作,我对Global.asax(“Access Control Allow Origin”(“*”)进行了适当的更改

当Android客户端调用其saveChanges()时,数据实际上被保存到数据库中,但它的失败承诺总是在客户端触发

在Web API服务器上,我注意到,通过浏览器进行Breeze调用时,我会得到以下输出跟踪并成功保存:

iisexpress.exe Information: 0 : Operation=ODataActionFilter.ActionExecuting
iisexpress.exe Information: 0 : Message='Action returned 'Breeze.WebApi.SaveResult'', Operation=ReflectedHttpActionDescriptor.ExecuteAsync
iisexpress.exe Information: 0 : Message='Will use same 'JsonMediaTypeFormatter' formatter', Operation=JsonMediaTypeFormatter.GetPerRequestFormatterInstance
iisexpress.exe Information: 0 : Message='Selected formatter='JsonMediaTypeFormatter', content-type='application/json; charset=utf-8'', Operation=DefaultContentNegotiator.Negotiate
iisexpress.exe Information: 0 : Operation=ApiControllerActionInvoker.InvokeActionAsync, Status=200 (OK)
iisexpress.exe Information: 0 : Operation=ODataActionFilter.ActionExecuted, Status=200 (OK)
iisexpress.exe Information: 0 : Operation=BreezeSampleController.ExecuteAsync, Status=200 (OK)
**iisexpress.exe Information: 0 : Response, Status=200 (OK), Method=POST, Url=http://localhost:59912/api/BreezeSample/SaveChanges, Message='Content-type='application/json; charset=utf-8', content-length=unknown'**
iisexpress.exe Information: 0 : Operation=JsonMediaTypeFormatter.WriteToStreamAsync
iisexpress.exe Information: 0 : Operation=BreezeSampleController.Dispose
但当从Android应用程序调用时,我会写入数据,但此跟踪有一个错误:

iisexpress.exe Information: 0 : Message='Action returned 'Breeze.WebApi.SaveResult'', Operation=ReflectedHttpActionDescriptor.ExecuteAsync
iisexpress.exe Information: 0 : Message='Will use same 'XmlMediaTypeFormatter' formatter', Operation=XmlMediaTypeFormatter.GetPerRequestFormatterInstance
iisexpress.exe Information: 0 : Message='Selected formatter='XmlMediaTypeFormatter', content-type='application/xml; charset=utf-8'', Operation=DefaultContentNegotiator.Negotiate
iisexpress.exe Information: 0 : Operation=ApiControllerActionInvoker.InvokeActionAsync, Status=200 (OK)
iisexpress.exe Information: 0 : Operation=ODataActionFilter.ActionExecuted, Status=200 (OK)
iisexpress.exe Information: 0 : Operation=BreezeSampleController.ExecuteAsync, Status=200 (OK)
**iisexpress.exe Information: 0 : Response, Status=200 (OK), Method=POST, Url=http://192.168.1.9:59912/api/BreezeSample/SaveChanges, Message='Content-type='application/xml; charset=utf-8', content-length=unknown'**
iisexpress.exe Error: 0 : Operation=XmlMediaTypeFormatter.WriteToStreamAsync, Exception=System.Runtime.Serialization.SerializationException: Type 'SMHMobileAPI.Models.BreezeSampleTodoItem' with data contract name 'BreezeSampleTodoItem:http://schemas.datacontract.org/2004/07/SMHMobileAPI.Models' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.
   at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeAndVerifyType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, Boolean verifyKnownType, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
   at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle objectTypeHandle, Type objectType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle, Type declaredType)
   at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
   at WriteArrayOfanyTypeToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , CollectionDataContract )
   at System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)
   at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
   at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
   at System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, Object obj, Boolean isDeclaredType, Boolean writeXsiType, Int32 declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
   at WriteSaveResultToXml(XmlWriterDelegator , Object , XmlObjectSerializerWriteContext , ClassDataContract )
   at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter, Object obj, XmlObjectSerializerWriteContext context)
   at System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
   at System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, Object obj, RuntimeTypeHandle declaredTypeHandle)
   at System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
   at System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
   at System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator writer, Object graph, DataContractResolver dataContractResolver)
   at System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter writer, Object graph)
   at System.Net.Http.Formatting.XmlMediaTypeFormatter.<>c__DisplayClass7.<WriteToStreamAsync>b__6()
   at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)
iisexpress.exe信息:0:Message='Action返回'Breeze.WebApi.SaveResult',Operation=ReflectedHttpActionDescriptor.ExecuteAsync
iisexpress.exe信息:0:Message='将使用相同的'XmlMediaTypeFormatter'格式化程序',操作=XmlMediaTypeFormatter.GetPerRequestFormatterInstance
iisexpress.exe信息:0:Message='Selected formatter='XmlMediaTypeFormatter',content type='application/xml;字符集=utf-8'',操作=DefaultContentCongregator.Congregate
iisexpress.exe信息:0:Operation=ApiControllerActionInvoker.InvokeActionAsync,状态=200(正常)
iisexpress.exe信息:0:操作=ODataActionFilter.ActionExecuted,状态=200(正常)
iisexpress.exe信息:0:Operation=breezSampleController.ExecuteAsync,状态=200(正常)
**iisexpress.exe信息:0:响应,状态=200(确定),方法=POST,Url=http://192.168.1.9:59912/api/BreezeSample/SaveChanges,Message='Content-type='application/xml;字符集=utf-8',内容长度=未知'**
iisexpress.exe错误:0:Operation=XmlMediaTypeFormatter.WriteToStreamAsync,Exception=System.Runtime.Serialization.SerializationException:类型为“SMHMobileAppi.Models.BreezeSampleTodoItem”,数据协定名称为“BreezSampleToDoItem:http://schemas.datacontract.org/2004/07/SMHMobileAPI.Models”他说。考虑使用DATACONTRORTCORDEVER或将未知类型的任何类型添加到已知类型的列表中,例如,使用NoNyType属性或将它们添加到传递给DATACONTROTTRORIGLASER的已知类型列表中。
在System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializationAndVerifyType(DataContract、XmlWriterDelegator、xmlWriter、Object obj、布尔verifyKnownType、RuntimeTypeHandle declaredTypeHandle、Type declaredType)
在System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithXsiType(XmlWriterDelegator xmlWriter,Object obj,RuntimeTypeHandle objectTypeHandle,Type objectType,Int32 declaredTypeID,RuntimeTypeHandle declaredTypeHandle,Type declaredType)
在System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialization(XmlWriterDelegator xmlWriter、Object obj、Boolean isDeclaredType、Boolean writeXsiType、Int32 declaredTypeID、RuntimeTypeHandle declaredTypeHandle)
在WriteArrayOfanyTypeToXml(XmlWriterDelegator、Object、XmlObjectSerializerWriteContext、CollectionDataContract)的WriteArrayOfanyTypeToXml处
在System.Runtime.Serialization.CollectionDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter、对象obj、XmlObjectSerializerWriteContext上下文)
在System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract DataContract,XmlWriterDelegator xmlWriter,Object obj,RuntimeTypeHandle declaredTypeHandle)
在System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract DataContract,XmlWriterDelegator xmlWriter,Object obj,RuntimeTypeHandle declaredTypeHandle)
在System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialization(XmlWriterDelegator xmlWriter、Object obj、Boolean isDeclaredType、Boolean writeXsiType、Int32 declaredTypeID、RuntimeTypeHandle declaredTypeHandle)
在WriteSavesUltToXML(XmlWriterDelegator、Object、XmlObjectSerializerWriteContext、ClassDataContract)
at System.Runtime.Serialization.ClassDataContract.WriteXmlValue(XmlWriterDelegator xmlWriter、Object obj、XmlObjectSerializerWriteContext上下文)
在System.Runtime.Serialization.XmlObjectSerializerWriteContext.WriteDataContractValue(DataContract DataContract,XmlWriterDelegator xmlWriter,Object obj,RuntimeTypeHandle declaredTypeHandle)
在System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract DataContract,XmlWriterDelegator xmlWriter,Object obj,RuntimeTypeHandle declaredTypeHandle)
在System.Runtime.Serialization.DataContractSerializer.InternalWriteObjectContent(XmlWriterDelegator编写器、对象图、DataContractResolver DataContractResolver)
在System.Runtime.Serialization.DataContractSerializer.InternalWriteObject(XmlWriterDelegator编写器、对象图、DataContractResolver DataContractResolver)
在System.Runtime.Serialization.XmlObjectSerializer.WriteObjectHandleExceptions(XmlWriterDelegator编写器、对象图、DataContractResolver DataContractResolver)
at System.Runtime.Serialization.DataContractSerializer.WriteObject(XmlWriter编写器,对象图)
在System.Net.Http.Formatting.XmlMediaTypeFormatter.c__DisplayClass7.b__u6()中
在System.Threading.Tasks.TaskHelpers.RunSynchronously(操作操作,取消令牌)
除了一些序列化错误之外,我还注意到post标题“application/xml”。我不确定这是否相关,但如果有人能提供帮助,我肯定希望得到一些帮助,尝试找到解决方案

谢谢 马克

我很确定
中的“应用程序/xml”
是相关的

保存后,Breeze Web API控制器会将更新/添加的实体返回给您。您提到的“Accept”头将导致Web API尝试使用XML格式化程序格式化这些实体,而XML格式化程序几乎是alw // get the current default Breeze ajax adapter var ajaxAdapter = breeze.core.config.getAdapterInstance("ajax"); // set fixed headers ajaxAdapter.defaultSettings = { headers: { "Accept": "application/json, text/javascript, */*; q=0.01" }, };