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ą?
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();
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