我有一个Web服务(用PHP创建),当我尝试使用.NET WebService Studio(但也使用Storm)使用此服务时,我遇到了问题。
有问题的数据类型在单独的文件中定义如下:
<simpleType name="Country">
<restriction base="string">
<minLength value="1" />
<maxLength value="3" />
</restriction>
</simpleType>
<complexType name="SecarPOISearchResult">
<complexContent>
<extension base="search:ngSearchResult">
<sequence>
<element name="ID_UserPOI" type="int" minOccurs="0" maxOccurs="1" />
<element name="ID_Firm" type="int" minOccurs="0" maxOccurs="1" />
<element name="ID_Department" type="int" minOccurs="0" maxOccurs="1" />
<element name="ID_Country" type="tns:Country" minOccurs="0" maxOccurs="1" />
</sequence>
</extension>
</complexContent>
</complexType>
使用此声明时,我总是收到错误:
System.Reflection.TargetInvocationException: Invocation target raised an exception. ---> System.InvalidOperationException: There is an error in XML document (2, 2002). ---> System.InvalidCastException: Object of type System.Xml.XmlNode[] cannot be assigned to object of type System.String.
in Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadersvc_SecarRevGeocodingEngine.Read12_SecarPOISearchResult()
in System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)
in System.Xml.Serialization.XmlSerializationReader.ReadArray(String typeName, String typeNs)
in System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)
in System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, String& fixupReference)
in Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadersvc_SecarRevGeocodingEngine.Read8_SecarPOISearchResultsResponse()
in System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)
in System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, String& fixupReference)
in Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadersvc_SecarRevGeocodingEngine.Read30_SecarPOISearchResults()
in System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, Boolean elementCanBeType, String& fixupReference)
in System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(String name, String ns, String& fixupReference)
in Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReadersvc_SecarRevGeocodingEngine.Read45_SearchPOIByNameResponse()
in Microsoft.Xml.Serialization.GeneratedAssembly.ArrayOfObjectSerializer25.Deserialize(XmlSerializationReader reader)
in System.Xml.Serialization.XmlSerializer.Deserialize(XmlReader xmlReader, String encodingStyle, XmlDeserializationEvents events)
当我从tns切换元素Country的类型时会发生有趣的情况:Country to string - 一切正常。同样的情况在另一种类型中稍早发生 - 再次使用union的simpleType(int和字符串,限制枚举仅为星号)。当我用简单的字符串替换这个类型时,这个错误消失了(并且用ID_Country元素发生了另一个错误)。
SOAP响应没问题,但.NET无法解析响应。这是一个已知的.NET错误吗?