Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/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
C# .NET SOAP序列化无界序列_C#_Wcf_Xml Serialization_Wsdl_Service Reference - Fatal编程技术网

C# .NET SOAP序列化无界序列

C# .NET SOAP序列化无界序列,c#,wcf,xml-serialization,wsdl,service-reference,C#,Wcf,Xml Serialization,Wsdl,Service Reference,我们有一个包含以下类型定义的WSDL: ... <xsd:complexType name="OrderItem"> <xsd:all> <xsd:element name="source" type="xsd:string" /> </xsd:all> </xsd:complexType> <xsd:complexType name="OrderItems"> <xsd:sequence>

我们有一个包含以下类型定义的WSDL:

...
<xsd:complexType name="OrderItem">
  <xsd:all>
    <xsd:element name="source" type="xsd:string" />
  </xsd:all>
</xsd:complexType>
<xsd:complexType name="OrderItems">
  <xsd:sequence>
    <xsd:element name="item" type="tns:OrderItem" maxOccurs="unbounded" />
  </xsd:sequence>
</xsd:complexType>
...
使用
XmlArray
XmlArrayItem
属性,我们可以分别控制
元素的名称,但无法获得所需的结构:

...
<items>
  <item>foo</item>
  <item>bar</item>
</items>
...
。。。
福
酒吧
...
我知道,如果WSDL指定类似于
的内容而不是无界序列,那么这个问题是可以避免的,但是考虑到上述情况,使用自定义序列化的唯一方法是什么


编辑:示例WSDL位于

似乎.NET WCF服务与我们的WSDL(它是手动创建的,重点是XSD而不是SOAP)不兼容

让SOAP API与.NET协同工作的最简单方法是修改WSDL以使用SOAP数组类型,这样
就变成了
SOAP enc:array
SOAP enc:arrayType=“tns:OrderItem[]”


然后,由服务引用的自动生成代码生成的结果XML是正确的。

看来.NET WCF服务与我们的WSDL(它是手动创建的,重点放在XSD上,而不是SOAP上)不兼容

让SOAP API与.NET协同工作的最简单方法是修改WSDL以使用SOAP数组类型,这样
就变成了
SOAP enc:array
SOAP enc:arrayType=“tns:OrderItem[]”


然后,由服务引用的自动生成代码生成的结果XML是正确的。

您还可以发布消息输出类型中引用的元素的定义吗?您不能更改web服务和wsdl,并且您正试图通过操纵XML序列化来塑造请求XML,这是否正确客户端类的属性?是的,WSDL是给定的,理想情况下,我们希望使用带有一些自定义序列化的服务引用生成的类来生成所需的输出。您还可以发布消息的输出类型中引用的元素的定义吗?您不能更改web服务和wsdl,并且您正试图通过XML塑造请求,这是正确的吗操作客户端类的XML序列化属性?是的,WSDL是给定的,我们理想情况下希望使用服务引用生成的类和一些自定义序列化来生成所需的输出。@cubuckley使用.Net生成的代理时,我遇到了类似的问题。我了解您的想法,但不知何故,我无法将sequence下的元素属性转换为soap enc:Array。您能否分享您的最终wsdl的示例,该示例对应于原始问题中的wsdl。提前感谢。您好@brain.overflow,我将尝试挖掘出正在工作的WSDL,并将其添加到今天的答案中。@brain.overflow我无法100%确定它是否正确,因为我不再有权访问原始应用程序,但是我必须包含complexType和新WSDL的修复程序。@cubuckley我在处理.Net生成的代理时遇到了类似的问题。我了解您的想法,但不知何故,我无法将sequence下的元素属性转换为soap enc:Array。您能否分享您的最终wsdl的示例,该示例对应于原始问题中的wsdl。提前感谢。您好@brain.overflow,我将尝试挖掘出正在工作的WSDL,并将其添加到今天的答案中。@brain.overflow我无法100%确定它是否正确,因为我不再有权访问原始应用程序,但我必须包含complexType以及新WSDL的修复程序。
...
<items>
  <item>foo</item>
  <item>bar</item>
</items>
...