Avatar billede bmdk Nybegynder
31. august 2009 - 16:09 Der er 6 kommentarer og
1 løsning

Returnere model objekter via WCF

Hey alle,

Er igang med at lave et større silverlight projekt, men er kørt lidt fast i det med arkitektur og LINQ to SQL..

Jeg har lige lavet et lille test projekt for at få det "under neglene". Screenshot af min nuværende arkitektur findes her:

www.bo-mortensen.dk/arkitektur.jpg

Det jeg gerne vil er, at mine wcf services skal returnere model objekter (i dette tilfælde et Person objekt), men er ikke helt klar over, hvordan dettes gøres? Er heller ikke helt klar over, om der er bedre måder at opbygge sin arkitektur på, end den jeg har valgt her, hvis nogen ved noget, så skriv endelig :)

Jeg har fulgt denne guide: http://silverlight.net/blogs/jesseliberty/archive/2009/08/16/linqtosql-a-detailed-review.aspx

Skrevet af Jesse Liberty fra MS.. og det fungerer også, det eksempel han har lavet der, kan absolut ikke få hans "Create a server-biz object" til at fungere.

Nogen der kan kaste lidt lys over det her for mig? :) På forhand tak!

Mvh. Bo
Avatar billede windcape Praktikant
31. august 2009 - 16:43 #1
Linq2sql er faktisk outdated, så du skal nok kigge på Entity Frameworket, før du graver dig dybt ind i L2S.

Umidbart kan jeg ikke rigtig se pointen, du vil køre en webservice med det formål at retunere data fra en database, over HTTP?

Overkomplicerere du det ikke lidt?
Avatar billede bmdk Nybegynder
31. august 2009 - 17:22 #2
hey windscape,

O.k, jeg vil lige kigge på hvad entity framworket er for en størrelse så :)

Kan godt være jeg overkomplicerer det, men gik jo som sagt bare ud fra den artikel, som Jesse Liberty havde skrevet der..

Må man spørge: hvordan ville du gøre det så?
Avatar billede Sussie14 Nybegynder
31. august 2009 - 21:39 #3
Hej Bo

Når vi snakker WCF, som er det du spørger til, så har jeg følgende forklaring på dette:

Når du vil overføre entiteter, så skal du oprette en message-kontrakt. Ligesom din service består af en kontrakt, over metoder du udstiller, så tilbyder WCF at du kan udstille message-kontrakter - til brug ved entiteter.

Se mit eksempel.

[ServiceContract]
public interface IService
{
    [OperationContract]
    Person GetPerson(string personName);
}

[MessageContract]
public class Person
{
    [DataMember]
    public string Name { get; set; }

}

Forklaring
WCF er Opt-In, dvs. når du tilføjer flere members til dit person objekt, så skal det markeres som DataMember - for ellers vil det ikke blive serialiseret og sendt med over streamen.

Anvender du .NET på klient-siden også og Visual Studio, så mapper SVCUtil (igennem Visual Studio), din proxy for dig og dine tilhørende data-members.

På DataMember og MessageContract attributterne har du mulighed for yderligere mapning af namespace og names - manipulering af dine data/serialisering, præcis som Serialisering med XmlSerializeren.

PS: Vi er flere, der er vilde med WCF.

God arbejdslyst.
Avatar billede bmdk Nybegynder
01. september 2009 - 00:09 #4
Hey Sussie14 og tak for dit svar :)

Jep, jeg er nogenlunde ved at forstå det med serialisering m.v. Har læst side op og side ned om både WCF og Entity Framework og jeg må nok sige, at jeg er endnu mere konfus end da jeg startede tidligere i dag.

Kan ikke helt overskue hvordan man bør lave sin arkitektur når man arbejder med Silverlight, bør man anvende model objekter? bør man anvende WCF? eller entity framework? eller begge?

Helt rundt på gulvet her :)
Avatar billede Sussie14 Nybegynder
02. september 2009 - 17:16 #5
Du spurgte og du fik et svar :)
Mener du er ved at lave dit spørgsmål helt op til noget arkitektonisk.

Du skal da helt sikkert vælge den arkitektur du bedst kan overskue og du har en chance for at implementere/fejlfinde.

Skriv noget, der virker og gem det andet til du har mere overskud. Løsningen sidder du med, der er bare flere veje derhen. Det vigtigste er at det virker.
Avatar billede bmdk Nybegynder
02. september 2009 - 17:21 #6
fair nok, jeg prøver mig frem.. tak for hjælpen
Avatar billede arne_v Ekspert
08. september 2009 - 01:45 #7
Et par supplerende betragtninger:

presentation layer/Silverligt
proxy layer/WCF stub (eller hvad web service client i Silverlight nu bruger)
    |
(SOAP/HTTP)
    |
web service layer/WCF service
business logic layer
data access layer/LINQ EF
    |
  (TDS)
    |
database layer/SQLServer

giver fint mening.

Det giver absolut ikke mening og er formentligt ikke teknisk muligt at lade client tier koden gå direkte i databasen.

Det er i 98 ud af 100 tilfælde en dårlig ide at flytte business logic ud i client tier og lade web service expose DAL.

Dit eneste valg er stort set om du vil have et separat sæt data klasser for presentation-proxy-service-business logic og business logic-data access eller du vil bruge de samme klasser.

Det optimale afhænger af hvor stor konceptuel forskel der er på den business logic man ønsker at expose og den underliggende data model.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester