Har du skickat ett DataSet från en web service någon gång så kanske du lagt märke till att bara klienter som kan skapa just ett DataSet kan anropa din tjänst. Så här ser nämligen WSDL kontraktet ut:
<s:element name="GetMeetingRequestDSResponse">Typinformationen kommer i runtime och kan enbart konsumeras av ett DataSet. Det gäller även typade DataSet, vilket självfallet inte borde vara fallet eftersom typinformationen är känd i o m att det finns ett schema definierat.
<s:complexType>
<s:sequence>
<s:element
minOccurs="0" maxOccurs="1" name="GetMeetingRequestDSResult">
<s:complexType>
<s:sequence>
<s:element ref="s:schema" />
<s:any />
</s:sequence>
</s:complexType>
</s:element>
</s:sequence>
</s:complexType>
</s:element>
[WebMethod]
public DataSet GetMeetingRequestDS()
{
return new DataSet();
}
DataSet är det idag enklaste och mest effektiva sättet att med Visual Studio och .NET Framework (Out Of the Box) skapa en datastruktur med innehåll från en relationsdatabas. Tyvärr så är det inte lämpligt att använda i en tjänstebaserad arkitektur, eftersom man inte bygger tjänster för att de ska konsumeras av en viss typ av plattform. Man vill ju ha ett teknikoberoende vilket man bara får om typerna som ska skickas över nätet kan definieras enligt WSDL.
En objektstruktur i .NET kan serialieras till en datastruktur som är kompatibel med WSDL. LINQ ger samma stöd som du får från DataSet för att populera en datastruktur fast för en godtycklig objektstruktur.
Inga kommentarer:
Skicka en kommentar