Home   Cover Cover Cover Cover
 

Parameter und Vererbung


Zu Abschnitt 7.4.2 des Buchs

In diesem Beispiel wird der Umgang mit abstrakten Parametertypen und Vererbung dargestellt. Bei Web-Services müssen alle Unterklassen eines Paramtertypes angegeben werden. Dafür werden die Attribute [SoapInclude] und [XmlInclude] verwendet, um die konkreten Unterklassen "Customer" und "Employee" in die WSDL-Beschreibung aufzunehmen. [SoapInclude] wird benötigt bei einem Aufruf mittels SOAP-HTTP und [XmlInclude] für Aufrufe mittels HTTP-GET bzw. HTTP-POST (siehe Link weiter unten).

PersonService.asmx
<%@ WebService Language="C#" Class="Kapitel7.PersonService" %>
using System; 
using System.Web.Services; 
using System.Web.Services.Protocols;
using System.Xml.Serialization;

namespace Kapitel7 {
  public class PersonService : WebService {
    [WebMethod]
    [SoapRpcMethod]
    [SoapInclude(typeof(Customer)), // moegliche Unterklassen von Person 
    SoapInclude(typeof(Employee))]  // (fuer SOAP-HTTP Aufrufe)
    [XmlInclude(typeof(Customer)), // moegliche Unterklassen von Person 
    XmlInclude(typeof(Employee))]  // (fuer HTTP-GET/POST Aufrufe)
    public Person Find(string ssn) {
      Person p = null;
      if (ssn == "1") 
        p = new Customer(ssn, "Marion Kunde", "EMP-33");
      else 
        p = new Employee(ssn, "Mario Arbeiter");
      return p;
    }
    
    [SoapRpcMethod] [WebMethod]
    public Person[] GetAll() {
      Person[] data = new Person[2];
      data[0] = new Customer("1", "Marion Kunde", "EMP-33");
      data[1] = new Employee("EMP-33", "Mario Arbeiter");
      return data;
    }
  }

  public abstract class Person {
    public string SSN; public string Name;
    public Person() {}
    public Person(string ssn, string name) { this.SSN = ssn; this.Name = name;}
  }
  public class Customer : Person {
    public string EmpSSN;
    public Customer() {EmpSSN = "??"; }
    public Customer(string ssn, string n, string e): base(ssn, n) {EmpSSN = e;}
  }
  public class Employee : Person {
    public Employee() {}
    public Employee(string ssn, string name) : base(ssn, name) {}
  }
}

Ausführung

Der nächste Link führt Sie zu einer automatisch erzeugten Seite. D.h. für den oben dargestellten Code wird eine HTML-Seite erzeugt, welche das Web-Service beschreibt und auch eine Möglichkeit zum Testen der Methoden anbietet.

http://dotnet.jku.at/book/samples/7/encoding/PersonService.asmx

Eine weitere Möglichkeit, wie Sie dieses Web-Service testen können, ist das Webservice Studio zu verwenden, welches auf der Begleit-CD zum Buch "Die .NET-Technologie" enthalten ist.

Testen Sie die Methoden über die HTML-Seite und über das Webservice Studio und vergleichen Sie die vom Service gelieferten XML-Antworten :-).