Jak zwrócić wiele wartości z usługi webservice?

Jestem zupełnie nowy w świecie usług internetowych, więc proszę o cierpliwość. Tworzę bardzo prosty serwis WWW w Visual Studio 2010 za pomocąpliki asmx.

Oto kod, którego używam:

namespace MyWebService
{
    [WebService(Namespace = "http://www.somedomain.com/webservices")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]

    public class Service1 : System.Web.Services.WebService
    {
        [WebMethod]
        public string simpleMethod(String str)
        {
            return "Hello " + str;
        }   
    }
}

Kiedy wywołuję to i wprowadzam wartość "John Smith" dla parametru str, który zwraca:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.somedomain.com/webservices">Hello John Smith</string>

Moje pytanie brzmi: jaka jest najlepsza praktyka zwracania więcej niż 1 wartości dla metody usługi internetowej? Jeśli wszystkie wartości są tego samego typu danych, czy powinienem użyć tablicy? Jeśli wartości zawierają różne typy danych czy muszę utworzyć klasę niestandardową?

Author: Baxter, 2012-08-20

1 answers

Uważam, że najlepszym projektem jest napisanie klasy i dołączenie jej do twojego WSDL. Spowoduje to udostępnienie podpisu klasy wraz z opisem usługi. Oznacza to, że klient, pomimo swojego języka, będzie mógł korzystać z obiektu tego typu.

Podczas tworzenia tej klasy, staraj się nie używać.Net wbudowanych typów niestandardowych , takich jak DataSet lub jakiekolwiek inne. Staraj się zawsze używać podstawowych typów, o ile to możliwe. Zapewni to, że Twój obiekt będzie łatwo w przeciwieństwie do innych platform, w których nie można korzystać z plików .Net, nie można korzystać z nich w żaden sposób.]}

Proszę sprawdzić to pytanie: Jak zadeklarować złożony zagnieżdżony Typ C # Dla usługi internetowej Pokazuje też trochę kodu i małą radę.

Daj mi znać, jeśli będziesz potrzebował wsparcia.

UPDATE

Załóżmy, że chcesz zwrócić dla danego webmethod następujący zbiór danych:

  • imię ucznia
  • Student ' s Data urodzenia
  • W 2007 roku został wybrany do Izby Reprezentantów, a w 2008 roku do Izby Reprezentantów.]}

Zobacz jak usługa będzie podpisana:

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;
    }
}

Po wywołaniu jest to wynik:

<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>

A najlepsze jest to, że ponieważ podpis tej klasy jest publiczny (zawarty w WSDL), możesz wykonać następujące w innym projekcie , po prostu przetwarzając WSDL:

        ServiceReference1.WebService1SoapClient SoapClient = new ServiceReference1.WebService1SoapClient();
        ServiceReference1.Student IsThisBaxter = SoapClient.HelloWorld();
 36
Author: Andre Calil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:23