Выставить дополнительные классы в ASP.NET 2.0 webservice - PullRequest
2 голосов
/ 21 июля 2010

Рассмотрим веб-метод, который предоставляет абстрактный класс:

[WebMethod]
public void Save(AbstractEntity obj) 
{  
   // ..
}

Есть несколько классов, унаследованных от AbstractEntity как

public class Patient : AbstractEntity 
{
   // ...
}

Теперь я хочу разрешить потребителю веб-службы создавать новый объект Patient и сохранять его:

service.Save(new Patient { Name = "Doe", Number = "1234567" });

Поскольку «Сохранить» принимает AbstractEntity, на стороне клиента не будет прокси-сервера Patient. Конечно, я мог бы создать фиктивный метод, который бы выставлял пациента, но я надеюсь, что есть лучший способ.

Как правильно представить класс Patient и другие классы, на которые нет прямой ссылки в интерфейсе веб-сервиса?

1 Ответ

5 голосов
/ 21 июля 2010

Вам необходимо добавить атрибут XmlInclude в ваш метод:

[WebMethod]
[XmlInclude(typeof(Patient))] 
public void Save(AbstractEntity obj) 
{  
   // ..
}

Как написано в комментариях, при добавлении атрибута XmlInclude и обновлении веб-ссылки на стороне клиента будут созданы прокси-классы для AbstractEntity и Patient (производные от AbstractEntity).

Одна вещь, которая не так хороша, заключается в том, что всякий раз, когда вы создаете новый класс, производный от AbstractEntity, вам придется добавить еще один атрибут XmlInclude для всех связанных веб-методов.

...