Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.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
使用maxOccurs属性时,.NET自动生成的WSDL客户端不处理抽象类型_.net_Visual Studio 2010_Xsd_Wsdl_Svcutil.exe - Fatal编程技术网

使用maxOccurs属性时,.NET自动生成的WSDL客户端不处理抽象类型

使用maxOccurs属性时,.NET自动生成的WSDL客户端不处理抽象类型,.net,visual-studio-2010,xsd,wsdl,svcutil.exe,.net,Visual Studio 2010,Xsd,Wsdl,Svcutil.exe,我在VisualStudio中添加了一个相当复杂的WSDL作为服务引用。我遇到的问题是,自动生成的客户机代码没有正确地处理抽象类型(并且忽略了替代该抽象类型的所有类型)。我不想发布整个WSDL,但这里有一个片段: <complexType name="AddTextFields"> <complexContent> <extension base="ti:TransformationInstructions">

我在VisualStudio中添加了一个相当复杂的WSDL作为服务引用。我遇到的问题是,自动生成的客户机代码没有正确地处理抽象类型(并且忽略了替代该抽象类型的所有类型)。我不想发布整个WSDL,但这里有一个片段:

<complexType name="AddTextFields">
    <complexContent>
        <extension base="ti:TransformationInstructions">
            <sequence>
                <element name="textFieldList"
                    type="atf:TextFieldList" />
            </sequence>
        </extension>
    </complexContent>
</complexType>

<complexType name="TextFieldList">
    <sequence>
        <element ref="atf:TextFieldBase"
            maxOccurs="unbounded" />
    </sequence>
</complexType>

<element name="TextFieldBase" abstract="true"/>

<element name="textField" substitutionGroup="atf:TextFieldBase">
  <complexType>
    <sequence>
      ...
    </sequence>
  </complexType>
</element>

<element name="checkBox" substitutionGroup="atf:TextFieldBase">
  <complexType>
    <sequence>
      ...
    </sequence>
  </complexType>
</element>
我在WSDL中有一些其他的抽象类型可以正常工作,在尝试比较它们时,我发现如果我从TextFieldList定义中删除maxOccurs=“unbounded”属性,那么.NET将正确生成插入抽象类型的类型。不幸的是,我们需要能够有一个或多个textFieldList元素,这样就无法工作

这只是.NET中的一个bug吗?或者是否有一些变通方法可以在不大幅更改WSDL的情况下工作

我考虑的一个解决方法是将实现更改为一种选择,而不是使用抽象:

<complexType name="TextFieldList">
<choice maxOccurs="unbounded">
    <element ref="atf:textField" />
    <element ref="atf:checkBox" />
    <element ref="atf:radioButtonGroup" />
    <element ref="atf:listBox" />
    <element ref="atf:comboBox" /> 
</choice>
</complexType>

移动maxOccurs属性“修复”了此问题

<complexType name="TextFieldList">
    <sequence maxOccurs="unbounded">
        <element ref="atf:TextFieldBase" />
    </sequence>
</complexType>

<complexType name="TextFieldList">
    <sequence maxOccurs="unbounded">
        <element ref="atf:TextFieldBase" />
    </sequence>
</complexType>