Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.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
从iPhone MonoTouch应用程序调用WCF服务时出现序列化问题_Iphone_Wcf - Fatal编程技术网

从iPhone MonoTouch应用程序调用WCF服务时出现序列化问题

从iPhone MonoTouch应用程序调用WCF服务时出现序列化问题,iphone,wcf,Iphone,Wcf,我在Windows服务器上有一个WCF服务,我正在尝试从MonoDevelopment中的iPhone应用程序调用该服务。web服务客户端是使用Silverlight服务生成实用程序生成的,并复制到MonoTouch环境中的iPhone开发项目中 所以服务非常简单。我有一个方法调用GetCustomers()方法并返回列表。我可以在MonoTouch iPhone应用程序代码中成功创建客户端。该方法确实执行,如果我尝试对结果进行计数,它会告诉我有91条记录(Northwind数据库/客户表)。因

我在Windows服务器上有一个WCF服务,我正在尝试从MonoDevelopment中的iPhone应用程序调用该服务。web服务客户端是使用Silverlight服务生成实用程序生成的,并复制到MonoTouch环境中的iPhone开发项目中

所以服务非常简单。我有一个方法调用
GetCustomers()
方法并返回
列表
。我可以在MonoTouch iPhone应用程序代码中成功创建客户端。该方法确实执行,如果我尝试对结果进行计数,它会告诉我有91条记录(Northwind数据库/客户表)。因此,我确信这项服务运作良好

问题是,当我尝试访问Customer对象的任何属性时,会出现以下错误:

CustomerName属性没有公共getter和setter

但下面的例外情况表明,情况并非如此。如果有人能告诉我我做错了什么,我需要一些帮助

Exception in async operation: System.Runtime.Serialization.InvalidDataContractException: DataMember property 'System.String CustomerName' on type 'NorthwindService.Customer' must have both getter and setter. at System.Runtime.Serialization.SharedContractMap.GetMembers (System.Type type, System.Xml.XmlQualifiedName qname, Boolean declared_only) [0x00116] in /Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/SerializationMap.cs:553 at System.Runtime.Serialization.SharedContractMap.Initialize () [0x00053] in /Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/SerializationMap.cs:516 at System.Runtime.Serialization.KnownTypeCollection.RegisterContract (System.Type type) [0x0004f] in /Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.cs:766 at System.Runtime.Serialization.KnownTypeCollection.TryRegister (System.Type type) [0x0002a] in /Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.cs:593 at System.Runtime.Serialization.KnownTypeCollection.RegisterCollection (System.Type type) [0x0000f] in /Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.cs:666 at System.Runtime.Serialization.KnownTypeCollection.TryRegister (System.Type type) [0x00062] in /Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.cs:605 at System.Runtime.Serialization.KnownTypeCollection.InsertItem (Int32 index, System.Type type) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.cs:389 at System.Collections.ObjectModel.Collection`1[T].Add (.T item) [0x0000c] in /Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Collections.ObjectModel/Collection.cs:72 at System.Runtime.Serialization.DataContractSerializer.ReadObject (System.Xml.XmlDictionaryReader reader, Boolean verifyObjectName) [0x0000c] in /Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/DataContractSerializer.cs:267 at System.Runtime.Serialization.XmlObjectSerializer.ReadObject (System.Xml.XmlDictionaryReader reader) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/XmlObjectSerializer.cs:74 at System.ServiceModel.Dispatcher.DataContractMessagesFormatter.MessageToParts (System.ServiceModel.Description.MessageDescription md, System.ServiceModel.Channels.Message message) [0x000b8] in /Developer/MonoTouch/Source/mono/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/BaseMessagesFormatter.cs:364 at System.ServiceModel.Dispatcher.BaseMessagesFormatter.DeserializeReply (System.ServiceModel.Channels.Message message, System.Object[] parameters) [0x00043] in /Developer/MonoTouch/Source/mono/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher/BaseMessagesFormatter.cs:175 at System.ServiceModel.ClientRuntimeChannel.Request (System.ServiceModel.Description.OperationDescription od, System.Object[] parameters) [0x0016a] in /Developer/MonoTouch/Source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientRuntimeChannel.cs:500 at System.ServiceModel.ClientRuntimeChannel.DoProcess (System.Reflection.MethodBase method, System.String operationName, System.Object[] parameters) [0x00038] in /Developer/MonoTouch/Source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientRuntimeChannel.cs:443 at System.ServiceModel.ClientRuntimeChannel.Process (System.Reflection.MethodBase method, System.String operationName, System.Object[] parameters) [0x00000] in /Developer/MonoTouch/Source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientRuntimeChannel.cs:425 异步操作中出现异常:System.Runtime.Serialization.InvalidDataContractException:DataMember属性“System.String CustomerName”在类型“NorthwindService.Customer”上必须同时具有getter和setter。 在/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/System.Runtime.Serialization/SerializationMap.cs:553中的System.Runtime.Serialization.Serialization.SharedContractMap.GetMembers(System.Type类型,System.Xml.XmlQualifiedName qname,仅声明布尔值)[0x00116] 在/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization.SharedContractMap.Initialize()[0x00053]中 在/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.cs:766中的System.Runtime.KnownTypeCollection.RegisterContract(System.Type类型)[0x0004f]处 在/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.TryRegister(System.Type类型)[0x0002a]中 在/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.RegisterCollection(System.Type类型)[0x0000f]中 在/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.TryRegister(System.Type类型)[0x00062]中 在/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/System.Runtime.Serialization/KnownTypeCollection.cs中的System.Runtime.knowntypcollection.InsertItem(Int32索引,System.Type类型)[0x00000 在/Developer/MonoTouch/Source/mono/mcs/class/corlib/System.Collections.ObjectModel/Collection`1[T]中添加(.T项)[0x0000c] 在/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/System.Serialization/DataContractSerializer.ReadObject(System.Xml.XmlDictionaryReader,布尔verifyObjectName)[0x0000c]中的System.Runtime 在/Developer/MonoTouch/Source/mono/mcs/class/System.Runtime.Serialization/System.Runtime.Serialization/System.Runtime.Serialization/XmlObjectSerializer.ReadObject(System.Xml.XmlDictionaryReader阅读器)[0x00000]中 在/Developer/MonoTouch/Source/mono/mcs/class/System.ServiceModel/System.ServiceModel.Dispatcher.MessageToParts(System.ServiceModel.Description.MessageDescription-md,System.ServiceModel.Channels.Message-Message)[0x000b8]的/Developer/MonoTouch/mcs/System.ServiceModel/System.ServiceModel.Dispatcher/basemessagesformter.cs:364 在/Developer/MonoTouch/Source/mono/mcs/class/System.ServiceModel/System.ServiceModel.Channels.Message Message,System.Object[]参数中的System.ServiceModel.Dispatcher.BaseMessagesFormatter.DeserializeReply(System.ServiceModel.Channels.Message,System.Object[]参数)[0x00043]处 在/Developer/MonoTouch/Source/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientRuntimeChannel.Request(System.ServiceModel.Description.OperationDescription od,System.Object[]参数)[0x0016a]中的System.ServiceModel 在/Developer/MonoTouch/Source/mono/mcs/class/System.ServiceModel/System.ServiceModel/System.ServiceModel/ClientRuntimeChannel.cs:443中的System.ServiceModel.ClientRuntimeChannel.DoProcess(System.Reflection.MethodBase方法、System.String操作名、System.Object[]参数)[0x00038]处 在/Developer/MonoTouch/Source/mono/mcs/class/System.ServiceModel/System.ServiceModel/System.ServiceModel/ServiceModel/ClientRuntimeChannel.cs:425中的System.ServiceModel.ClientRuntimeChannel.Process(System.Reflection.MethodBase方法,System.String操作名,System.Object[]参数)[0x00000]处
不,服务不是很好。它似乎是一个异步方法,因此当第一次调用似乎成功时,除非关闭异步调用并获取返回值,否则可能不会成功。结果的处理和计数可能非常成功,但结果的实际序列化(要求客户类型同时具有setter和getter)并不成功


这是WCF中为数不多的例外之一,几乎总是正确的,而且非常具体。您确定客户类型同时具有getter和setter吗?他们的访问级别一致吗?

不,服务运行不正常。它似乎是一个异步方法,因此当第一次调用似乎成功时,除非关闭异步调用并获取返回值,否则可能不会成功。结果的处理和计数可能非常成功,但结果的实际序列化需要Cust
[DataContract,
MonoTouch.Foundation.Preserve(AllMembers=true)]
public class EntityClass
{
    [DataMember]
    public string Field {get;set;}
}