Я считаю, что лучше всего написать класс и включить его в свой WSDL. Это сделает подпись класса доступной вместе с описанием вашей службы. Это означает, что клиент, независимо от его языка, сможет использовать объект этого типа.
При создании этого класса старайтесь не использовать встроенные настраиваемые типы .Net, например DataSet
или любые другие. По возможности старайтесь всегда использовать базовые типы. Это гарантирует, что ваш объект будет легко сериализован и десериализован, а также будет использоваться клиентскими платформами, отличными от .Net.
Пожалуйста, проверьте этот вопрос: Как объявить сложный Вложенный тип C # для веб-службы В нем есть небольшой код и небольшой совет.
Дайте мне знать, если вам понадобится дополнительная поддержка.
ОБНОВЛЕНИЕ
Допустим, вы хотите вернуть для данного веб-метода следующий набор данных:
- Имя студента
- Дата рождения студента
- Список курсов, которые в настоящее время назначены студенту (представленные их именами)
Посмотрите, как будет подписана услуга:
public class WebService1 : System.Web.Services.WebService
{
public class Course
{
public string Name { get; set; }
}
public class Student
{
public string Name { get; set; }
public DateTime BirthDate { get; set; }
public List<Course> CurrentCourses { get; set; }
}
[WebMethod]
public Student HelloWorld()
{
Student Baxter = new Student();
Baxter.Name = "Baxter";
Baxter.BirthDate = new DateTime(1986, 04, 22);
Baxter.CurrentCourses = new List<Course>();
Baxter.CurrentCourses.Add(new Course() { Name = "SOAP Webservices 101" });
Baxter.CurrentCourses.Add(new Course() { Name = "Mastering C#" });
Baxter.CurrentCourses.Add(new Course() { Name = "Why you (and I) suck at Javascript" });
return Baxter;
}
}
После его вызова результат:
<Student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<Name>Baxter</Name>
<BirthDate>1986-04-22T00:00:00</BirthDate>
<CurrentCourses>
<Course>
<Name>SOAP Webservices 101</Name>
</Course>
<Course>
<Name>Mastering C#</Name>
</Course>
<Course>
<Name>Why you (and I) suck at Javascript</Name>
</Course>
</CurrentCourses>
</Student>
И самое лучшее, что, поскольку эта подпись класса является общедоступной (включена в WSDL), вы можете сделать следующее в другом проекте, просто обработав WSDL:
ServiceReference1.WebService1SoapClient SoapClient = new ServiceReference1.WebService1SoapClient();
ServiceReference1.Student IsThisBaxter = SoapClient.HelloWorld();
person
Andre Calil
schedule
20.08.2012