Webservice tipos complexos e herança de classe
-
19-09-2019 - |
Pergunta
Usando a seguinte definição Webservice usando aClientArgs como um tipo complexo:
[System.Web.Script.Services.ScriptService]
public class Controller : System.Web.Services.WebService {
[WebMethod]
public void save_client(aClientArgs client)
{
// Save client data
}
}
Em seguida, definindo aClientArgs como uma sub-classe:
public class aArgs
{
public string id = null;
public string name = null;
}
public class aClientArgs : aArgs
{
public string address = null;
public string website = null;
}
Retorna o seguinte fragmento de WSDL para os args save_client:
<save_client xmlns="http://tempuri.org/">
<client>
<address>string</address>
<website>string</website>
</client>
</save_client>
Quando eu estou esperando o seguinte:
<save_client xmlns="http://tempuri.org/">
<client>
<id>string</id>
<name>string</name>
<address>string</address>
<website>string</website>
</client>
</save_client>
Assim, parece que o .NET WebService não está tratando propriedades herdadas como argumentos / variáveis ??para fins de um serviço web. Como faço para obter .NET também usar as propriedades da classe base?
Solução
Como você determinou que o WSDL está errado? Você navegar para o serviço e clique no link para o método save_client?
Isso é apenas uma página de ajuda. Neste caso, é errado. Clique no link para a descrição do serviço, e eu acho que você verá o seguinte:
<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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow