Сложные типы веб-сервисов и наследование классов
-
19-09-2019 - |
Вопрос
Используя следующее определение веб-сервиса с использованием aClientArgs как сложного типа:
[System.Web.Script.Services.ScriptService]
public class Controller : System.Web.Services.WebService {
[WebMethod]
public void save_client(aClientArgs client)
{
// Save client data
}
}
Затем определите aClientArgs как подкласс:
public class aArgs
{
public string id = null;
public string name = null;
}
public class aClientArgs : aArgs
{
public string address = null;
public string website = null;
}
Возвращает следующий фрагмент WSDL для аргументов save_client:
<save_client xmlns="http://tempuri.org/">
<client>
<address>string</address>
<website>string</website>
</client>
</save_client>
Когда я ожидаю следующего:
<save_client xmlns="http://tempuri.org/">
<client>
<id>string</id>
<name>string</name>
<address>string</address>
<website>string</website>
</client>
</save_client>
Таким образом, похоже, что веб-служба .NET не рассматривает унаследованные свойства как аргументы/переменные для целей веб-службы.Как мне заставить .NET также использовать свойства базового класса?
Решение
Как вы определили, что WSDL неправильный?Вы перешли на службу и щелкнули ссылку на метод save_client?
Это просто страница помощи.В данном случае это неправильно.Нажмите ссылку на описание услуги, и я думаю, вы увидите следующее:
<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>
Не связан с StackOverflow