Webservice newbie spørgsmål
Hej eksperterJeg er begyndt at rode med webservices, og er nu nået til et punkt, hvor jeg har brug for jeres hjælp.
Udfordringen består i, at jeg gerne vil udstille et hieraki af klasser.
Nedenfor kan i se min kode. Koden optræder i et asp.net webservice projekt, hvilket bevirker at wsdl-filen genereres for mig.
// Klassen Supertype (fantastisk navngivning)
//-------------------
namespace WebService1
{
public class SuperType
{
public String typeName;
public virtual void TypeNameToFile()
{
// create a writer and open the file
TextWriter tw = new StreamWriter("C:/created_by_super.txt");
// write a line of text to the file
tw.WriteLine("I am superType - " + typeName);
// close the stream
tw.Close();
}
}
}
// Klassen SubTypeA
//-------------------
namespace WebService1
{
public class SubTypeA : SuperType
{
public SubTypeA()
{
}
public override void TypeNameToFile()
{
// create a writer and open the file
TextWriter tw = new StreamWriter("C:/created_by_subTypeA.txt");
// write a line of text to the file
tw.WriteLine("I am SubType A - " + typeName);
// close the stream
tw.Close();
}
}
}
// WebService1.asmx
//-------------------
namespace WebService1
{
/// <summary>
/// Summary description for WebService1
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// [System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{
//[WebMethod]
//public void DummySubA(SubTypeA a) { }
//[WebMethod]
//public void DummySubB(SubTypeB b) { }
[WebMethod]
public String SubTypeTest(SuperType a)
{
a.TypeNameToFile();
return "hat";
}
}
}
///////////////////////////
//Uddrag fra den fil der gør brug af servicen
//TypeA a = new SubTypeA();
SuperType super = new SuperType();
super.typeName = "super";
SubTypeA subA = new SubTypeA();
subA.typeName = "subA";
//SuperType subB = new SubTypeB();
SubTypeB subB = new SubTypeB();
subB.typeName = "subB";
WebService1SoapClient client = new WebService1SoapClient();
client.SubTypeTest(super);
client.SubTypeTest(subA);
client.SubTypeTest(subB);
////////////////////////////////////
Jeg vil gerne opnå, at klienten til servicen har kendskab til typerne SubTypeA og SubTypeB, som begge nedarver fra SuperType.
For at dette skal være muligt, så er det velsagtens nødvendigt at subtyperne optræder i wsdl-filen. Det er imidlertid kun typerne der optræder som metode-parametre, der som udgangspunkt indgår i den wsdl-fil, som der bliver genereret automatisk for mig.
Jeg kan lave en hacket løsning, hvor jeg opretter tomme web-methods (se asmx filen ovenfor), der tager subtyperne som argument. Men dette virker klodset.
Det er min opfattelse, at jeg skal kontrollere at subtyperne kommer med som en del af wsdl-filen, men jeg ved ikke hvordan dette gøres. Skal jeg bruge attributter, skal jeg benytte wsdl.exe eller noget helt tredie?
Afslutningsvis - skulle I evt. kende til gode ressourcer angående web services, så vil meget gerne høre om dette også.
På forhånd tak.
/hotmoller