Webservice types complexes et l'héritage de classe
-
19-09-2019 - |
Question
En utilisant la définition de Webservice suivante à l'aide aClientArgs comme un type complexe:
[System.Web.Script.Services.ScriptService]
public class Controller : System.Web.Services.WebService {
[WebMethod]
public void save_client(aClientArgs client)
{
// Save client data
}
}
Ensuite, la définition aClientArgs comme une sous-classe:
public class aArgs
{
public string id = null;
public string name = null;
}
public class aClientArgs : aArgs
{
public string address = null;
public string website = null;
}
Retourne le fragment WSDL suivant pour les save_client args:
<save_client xmlns="http://tempuri.org/">
<client>
<address>string</address>
<website>string</website>
</client>
</save_client>
Quand je me attends à ce qui suit:
<save_client xmlns="http://tempuri.org/">
<client>
<id>string</id>
<name>string</name>
<address>string</address>
<website>string</website>
</client>
</save_client>
Il semble donc que le WebService .NET ne traite pas les propriétés héritées comme arguments / variables à des fins d'un service Web. Comment puis-je obtenir .NET également d'utiliser les propriétés de la classe de base?
La solution
Comment avez-vous déterminé que le WSDL est erroné? Est-ce que vous passez en revue au service et cliquez sur le lien pour la méthode save_client?
C'est juste une page d'aide. Dans ce cas, il est faux. Cliquez sur le lien pour la description du service, et je pense que vous verrez ce qui suit:
<s:complexType name="aClientArgs">
<s:complexContent mixed="false">
<s:extension base="tns:aArgs">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Address" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Website" type="s:string" />
</s:sequence>
</s:extension>
</s:complexContent>
</s:complexType>
<s:complexType name="aArgs">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="ID" type="s:string" />
<s:element minOccurs="0" maxOccurs="1" name="Name" type="s:string" />
</s:sequence>
</s:complexType>