2011-01-08 7 views
0

Ich habe einige Beispiele von RIA-Diensten verfolgt und obwohl ein großartiges Konzept, bin ich in WCF Service (nicht RIA) gesperrt, wie es auch von anderen Clients wie WPF und asp.net verwendet wird.Silverlight: Aufruf an WCF Services (nicht RIA) - Async-Modell, Entitätsmodelle und Datenanmerkungen?

Das Gute an RIA war, dass der ASYNC-Aufruf des Dienstes verborgen war, aber bei WCF nehme ich an, dass dies nicht der Fall ist. Wie ist es also möglich, einen WCF-Dienst von silverlight anzurufen. Service-Referenz hinzufügen? und dann nehme ich an, ich muss anrufen und auf einen rückruf warten?

Irgendwelche Tutorials zu diesem Thema?

Dies ist eine echte Schande für mich, da ich gerne RIA-Dienste verwendet hätte.

Die anderen Zweifel, die mir in den Sinn kommen, ist die Verwendung von Entity-Modellen und Daten Annotationen. In Ria war das wirklich einfach, aber wenn ich Standard-WCF-Dienste verwende, dann nehme ich an, dass die Entitätsklassen (tatsächlich verwende ich das ENtity-Framework) auf dem Client ankommen (silverlight), weil ich Service-Referenz hinzufüge? Stimmt das hier?

Mit Datenannotationen hat ria automatisch die Entitätsklassen mit den Datenanmerkungen vom Server (ria) an den Client gesendet (silverlight) - aber was ist mit den Standard-WCF-Diensten der Fall.

Also derzeit glaube ich, dass ich eine silverlight clientn App und "NO" RIA-Dienste brauche, aber ich würde im Grunde zu WCF Dienste aufrufen.

Die Frage, die jetzt auftaucht, ist, sollte ich eine Mischung aus RIA und WCF-Diensten verwenden? Silver ruft RIA und dann RIA ruft WCF-Dienst ...

Ich würde wirklich jedes Feedback apprecaite wie ich ein wenig bin die richtige Richtung verloren zu nehmen ... ria - es war so einfach :-)

Vielen Dank im Voraus

+0

Sie können dies tun. Wir haben gerade (vor ein paar Monaten) alle unsere WCF-Dienste auf RIA-Dienste umgestellt, so dass ich nicht den Code zur Hand habe (gekoppelt mit der Tatsache, dass ich nicht bei der Arbeit bin), um Ihnen ein Beispiel zu zeigen. – ChrisF

+0

Danke Chris, danke für die Bestätigung ... Ja das ist immer noch eine Grauzone für mich. Ich liebe RIA-Dienste, aber ich habe einfach nicht die Möglichkeit, sie zu verwenden. – Martin

+0

Die andere Idee, die ich hatte, obwohl könnte völlig falsch sein :-) war es, eine lokale (local silverlight webapp) WCF-Dienst SVC zu schaffen, so dass silverlight dies aufrufen kann und bei Bedarf kann ich dann den WCF-Dienst für Daten etc. anrufen würde den lokalen wcf-Dienst für Standardgeschäftslogik-Typen verwenden, die meinen externen WCF-Dienst nicht aufrufen müssen. Macht das Sinn? Oder eine Verschwendung von Ressourcen? – Martin

Antwort

0

Wenn Sie einen Dienstverweis auf das Silverlight-Projekt hinzuzufügen, der Client-Code wird für Sie automatisch generiert werden, dh Sie eine Klasse von der Form erhalten wird:

public partial class AdventureWorksEntities : global::System.Data.Services.Client.DataServiceContext 

Fortan können Sie die DataServiceCollection-Klasse in verwenden um die gesamte Client-Server-Logik unter der Haube zu verstecken. Zum Beispiel:

using DataServices.EmployeesService; 
using System; 
using System.Data.Services.Client; 
using System.Windows.Controls; 

namespace DataServices 
{ 
    public partial class MainPage : UserControl 
    { 
     private AdventureWorksEntities context = new AdventureWorksEntities(new Uri("Services/EmployeesService.svc", UriKind.Relative)); 

     public MainPage() 
     { 
      InitializeComponent(); 

      DataServiceCollection<Employee> data = new DataServiceCollection<Employee>(); 
      this.dataGrid.ItemsSource = data; 
      data.LoadAsync(context.Employees); 
     } 
    } 
} 

Ich glaube, dass this Code Project article können Sie loslegen.