Mit Hilfe des Silverlight RIA Services Toolkit lassen sich zusätzliche Optionen der RIA Services nutzen.
LinqToSql DomainService SOAP Endpoint JSON Endpoint ASP.NET DomainDataSource Control In diesem Blog Eintrag betrachte ich einmal die Möglichkeiten der serialisierung. Insgesamt kann man stand heute folgenden Formate wählen.
Binary OData SOAP JSON Allerdings muss in der Web.Config manuell die Konfiguration erweitert werden.
<domainServices>
<endpoints>
<add name="OData"
type="System.ServiceModel.DomainServices.Hosting.ODataEndpointFactory,
System.ServiceModel.DomainServices.Hosting.OData, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" />
<add name="JSON"
type="Microsoft.ServiceModel.DomainServices.Hosting.JsonEndpointFactory,
Microsoft.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" />
<add name="Soap"
type="Microsoft.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory,
Microsoft.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35" />
</endpoints>
</domainServices>
Der Aufruf für eine JSon Rückgabe erfolgt in der Form
http://localhost:[port]/ClientBin/[Projektname]-Web-[DomainServiceklasse].svc/Json/[Methode]
Da die SVC Dateien nicht wirklich existieren sondern per IIS Modul Mapping behandelt werden kann der Pfad statt Clientbin auch z.B. Service lauten.
Wenn man den Traffic mit Fiddler mitschneidet kann man sehr gut erkennen wie das Json Format aufgebaut ist.
Die Aufrufe der einzelnen Methoden und die Rückgabe Datenmenge in KB im Vergleich
..KoelnSL-Web-DomainServiceMD.svc/binary/GetOrdersDetails
|
607K |
..KoelnSL-Web-DomainServiceMD.svc/Json/GetOrdersDetails
|
563K |
..KoelnSL-Web-DomainServiceMD.svc/OData/GetOrdersDetails
|
1109K |
..KoelnSL-Web-DomainServiceMD.svc/Soap/GetOrdersDetails
|
erzeugt 400er Error |
Soap Abrufe sind leider im Browser nicht direkt möglich. Deshalb auch die Fehlermeldung. Um den Service bzw die Methode testweise aufzurufen könnten man das Hilfstool WCFtestClient.exe verwenden. Leider unterstützt dieses keine Domainservices. Also bleibt nur der Weg über das Silverlight Projekt.
Leider kompiliert meine Lösung anschliessend nicht mehr. Selbst auf Nachfrage bei Microsoft konnte man adhoc das Problem nicht lösen. Die einzige Antwort das es aktuellere Bits der RIA Services und Silverlight (GDR) gibt hilft nicht, da ich dafür alles neu installieren muss und dann mit RC Bits arbeite die nirgendwo laufen. Entsprechend werde ich die Lösung für SOAP in einem späteren Blog nachliefern.