2010-03-16 56 views
2

我是新来的,我希望任何人都可以帮助我。为什么WCF服务返回xml序列化对象?

我有用VB.NET编写的这个客户端的WCF服务和Windows窗体。 Service类开始返回xml序列化对象,但Service端的所有类都是DataContract -s,服务类是DataContractFormat。我到处搜索关于序列化的内容,我无法找到它开始这样做的理由。

我检查了我的类和服务,app.config文件,但我找不到任何东西。

我检查了Reference.vb类,它的System.Xml.Serialization.XmlElementAttribute无处不在。 这个问题看起来可能是假的,但我真的不知道该怎么做。我只想知道什么可以导致服务采取这种行动。

谢谢。

+1

你是什么意思“服务类开始返回XML序列化对象”?服务总是返回序列化的对象。 – 2010-03-16 07:52:24

+0

我的意思是,我的服务工作正常,但我无法弄清楚为什么它开始返回xmlnode。 实施例:System.Xml.Serialization.XmlElementAttribute _ 公共接口IService1 _ 功能getActivities()作为对象() 完接口 函数生成助手活动对象阵列,并返回到客户端侧,但在客户端而不是对象数组我有xmlnode。 – hgulyan 2010-03-16 07:57:46

+0

抱歉,不清楚的解释。 据我所知,WCF可以返回数据和XML序列化对象,我的服务正在返回数据序列化对象,但它现在返回xmlnode。我试图找出原因。 – hgulyan 2010-03-16 08:07:11

回答

3

所以我假设你没有故意改为使用XmlSerializer,那么,是吗?

当WCF运行时决定使用XmlSerializer而不是DataContractSerializer时,通常有多种情况,即当您有一个现有的WSDL/XSD包含DataContractSerializer无法处理的某些元素时。

您是否检查了Reference.vb类 - 通常,Visual Studio中的Add Service Reference函数会将注释添加到生成的文件中,以解释为什么它切换到XML序列化程序。它说什么吗?

+0

marc_s, 不,我没有在我的项目中使用XmlSerializer。 “现有的WSDL/XSD”是指我自己的WSDL/XSD文件还是由wsf生成的?我没有WSDL和XSD文件。 我检查了Refernce.vb,并在大多数服务功能上面找到了相同的注释。它说: “'CODEGEN:Parameter''需要使用参数模式无法捕获的其他模式信息,具体属性为'System.Xml.Serialization.XmlArrayAttribute'。” 谢谢你的回应。我会尝试谷歌的问题。这个评论可以成为我的问题的原因吗?这是什么意思 – hgulyan 2010-03-16 12:04:29

+0

我现在可以看到生成的代码,xsd和wsdl文件, 但它不起作用。 我添加了一个函数来返回我的自定义类 的数组,并且在更新服务引用之后,它生成了xml序列化的 对象。 – hgulyan 2010-03-17 06:10:58

+0

它会通过添加该数组来显示,您触发WCF切换到XML串行器模式。数组中标记为[DataContract]的对象类型是否返回?你可以尝试返回列表而不是? – 2010-03-17 06:40:37