2014-09-16 10 views
8

Pracuję na Uniwersyteckim Systemie Zarządzania, na którym używam usługi WCF, aw usłudze korzystam z DataTables i DataSet do pobierania danych z bazy danych i bazy danych jest serwer sql.Dlaczego zwracanie zestawu danych lub tabeli danych z usługi WCF nie jest dobrą praktyką? Jakie są alternatywy?

Moje pytania są

  • Czy za pomocą DataTables i zestawów danych „dobra praktyka” lub „złych praktyk”?
  • Jeśli jest źle, jaka jest alternatywa DataTable/DataSet?
  • Jeśli jest źle, jakie są główne powody?
+4

[Wracając DataSetów z WebServices jest pomiot szatana i reprezentuje wszystko co jest naprawdę zła w świecie] (http : //www.hanselman.com/blog/ReturningDataSetsFromWebServicesIsTheSpawnOfSatanAndRepresentsAllThatIsTrulyEvilInTheWorld.aspx) SCOTT HANSELMAN – Habib

+0

Czy używasz ich * w * usłudze lub * poza *, na przykład zwracając je? – nvoigt

+0

Na czym polega odpowiedzialność za usługę, którą budujesz, czy wiesz (i masz kontrolę) nad klientami? – Jocke

Odpowiedz

10

Zwracanie zestawów danych z serwisów internetowych zazwyczaj nie jest uważane za "dobrą praktykę". Zagadnienia zostały dokładnie udokumentowane w poniższych linków:

http://msdn.microsoft.com/en-us/magazine/cc163751.aspx
http://www.4guysfromrolla.com/articles/051805-1.aspx
http://msdn.microsoft.com/en-us/magazine/cc188755.aspx

Podsumowując, największe problemy z powrotem DataSet obiekty z usług internetowych wydają się wiązać wydajność serializacji, non-.net interoperacyjność . Ponadto ogólny, polimorficzny charakter struktury danych jest wysoki do czasu wykonania, dlatego definicja WSDL nie zapewnia pełnego opisu sygnatury metody. Podobnie jak w przypadku każdej decyzji dotyczącej projektu, należy rozważyć koszty i korzyści oraz określić najlepsze dopasowanie, biorąc pod uwagę konkretne cele i ograniczenia.

Jeśli chodzi o alternatywy, można rozważyć użycie ogólnej kolekcji (np. List<yourClassHere>) lub może nawet rozważyć niektóre wersje architektury, aby umożliwić korzystanie z ODATA.

Poniższe linki przedstawiają dobre referencje dla powracających podmiotów za pośrednictwem usług internetowych. http://msdn.microsoft.com/en-us/library/orm-9780596520281-01-14.aspx http://www.codeproject.com/Articles/127395/Implementing-a-WCF-Service-with-Entity-Framework http://msdn.microsoft.com/en-us/data/hh237663.aspx

+1

+1, ale proszę dać krótki przegląd tego, co jest w tych linkach. –

+0

Czy możesz podać mi przykład na kolekcje lub link? –

+0

@Seymour: używając DataSet/DataTable, interoperacyjność usługi WCF pozostanie inna niż platforma .Net, czy nie? –

1

Istnieją 3 powodem nieudanej typ zwracany jako datatable usług WCF

  • Musisz podać dane Nazwa tabeli jak:

    MyTable=new DataTable("tableName"); 
    
  • Kiedy jesteś dodając odniesienie po stronie klienta usługi WCF wybierz dll wielokrotnego użytku system.data

  • Określanie atrybutu datatable zmiennej składowej jak

    [DataMember] 
    public DataTable MyTable{ get; set; } 
    
-1

Używam DataTable w mojej aplikacji WCF, ale otrzymuję błąd. W ten sposób naprawiłem błąd.

Podczas zwracania DataTable z usługi sieci web w WCF do aplikacji formularza Windows. Otrzymałem ten wyjątek.

System.ServiceModel.CommunicationException: "Wystąpił błąd podczas odbierania odpowiedzi HTTP na http://localhost:52968/MunerahService1.svc. Może to być spowodowane wiązaniem punktu końcowego usługi bez użycia protokołu HTTP. Może to również wynikać z przerwania kontekstu żądania HTTP przez serwer (prawdopodobnie z powodu wyłączenia usługi). Zobacz dzienniki serwera, aby uzyskać więcej szczegółów. "

Stało każdym razem, gdy próbował odzyskać DataTable

Aby rozwiązać ten wyjątek, co potrzebne, aby dać DataTable nazwę. Kod

z błędem

tab = new DataTable(); 

kodu Fixed usunąć excption

tab = new DataTable("Doctor_info"); 
+0

To tak naprawdę nie odpowiada na oryginalne pytanie, czy nie? – pirho

Powiązane problemy