WCF - 在您的datacontract中使用泛型会使您的WSDL不可互操作吗?

时间:2011-06-24 20:50:34

标签: wcf generics interop wsdl datacontract

基本上:

[DataContract(Namespace = "http://www.abc.com/foo" Name = "Get{0}Request")]
public class GetGenericRequest<T> { ... }

我的WSDL有这个版本:

<xs:complexType name="GetFooRequest">
  <xs:annotation>
    <xs:appinfo>
      <GenericType xmlns="http://schemas.microsoft.com/2003/10/Serialization/" Name="Get{0}Request" Namespace="http://www.abc.com/foo">
        <GenericParameter Name="Foo" Namespace="http://www.abc.com/foo"/>
      </GenericType>
    </xs:appinfo>
  </xs:annotation>
  <xs:sequence>
    <xs:element xmlns:q2="http://schemas.microsoft.com/2003/10/Serialization/Arrays" minOccurs="0" name="Ids" nillable="true" type="q2:ArrayOfint"/>
  </xs:sequence>
</xs:complexType>
<xs:element name="GetFooRequest" nillable="true" type="tns:GetFooRequest"/>

所以,看看它似乎并不是可以互操作的。它有额外的“appinfo”东西可能会为Java或PHP带来麻烦吗?或者他们会忽略那个?

另外,更奇怪的是,无论我使用int[]还是ICollection<int>等,它仍然会生成类型ArrayOfint(我知道它会更改所有底层集合理解为数组。但是,这个命名是否可以互操作?)

1 个答案:

答案 0 :(得分:1)

它是可互操作的 - 对于客户来说,就像你有一个名为GetFooRequest的非泛型类一样。至于集合,只要元素<xs:sequence> of <xs:int>的模式是“标准”,名称就不会(或不应该)重要。