2010-07-26 6 views
6

Szenario generiert:Hinzufügen von WCF-Service Referenz Code nicht

  • Web-Site-Projekt unter .NET 3,5
  • Visual Studio 2010
  • WCF-Service Referenz

Problem:
Ich versuche, eine Klasse mit dem Attribut DataContract Attribut zu erweitern. Ich habe die generierte Klasse partial deklariert, so dass ich sie leicht erweitern konnte. Ich habe versucht, eine partielle Klasse innerhalb desselben Namensraums mit demselben Namen zu deklarieren, aber sie scheint nicht zu erkennen, welche Klasse sie erweitert. Ich habe versucht, die generierte Codedatei (Reference.cs) zu finden, die ich nach dem Lesen dieser article innerhalb des Referenzordners existierte, aber es war nicht da. Beim Versuch, zur Definition der Klasse zu navigieren, fand ich heraus, dass es in einer kompilierten Bibliothek war, und das größte Problem ist, dass es nicht als partiell deklariert wurde. Frage:
Ist dieser Unterschied auf die Tatsache zurückzuführen, dass ich eine Website und kein Web-Projekt verwende? Wenn ja, gibt es eine Möglichkeit, den Code-Generator (der auch scheint, den generierten Code zu kompilieren), die Klasse als partiell zu deklarieren?

Antwort

3

Ja, es gibt eine Möglichkeit, Ihre DataContract-Klassen als partiell zu deklarieren.

Dafür würden Sie die DTO pattern verwenden möchten. Dies bedeutet im Wesentlichen, dass "gemeinsam genutzte" Klassen in einer anderen Assembly definiert werden und sowohl der Dienst als auch die App, die den Dienst nutzt, beide die Assembly mit Ihren gemeinsamen Klassen referenzieren.

So könnte zum Beispiel Ihre "DTOs" Assembly ein DTO namens "Product" enthalten. Ok, also machst du sie Teilweise, und als nächstes dekorierst du Produkt, und was auch immer andere Klasse mit den WCF-Attributen, wie DataContract und DataMember etc.

Jetzt referenzieren Sie DTO-Assembly mit Ihnen Service-Projekt und Ihr Web Projekt.

Jetzt, wenn Sie zu Ihrem Webprojekt gehen und auf "Add Service Reference" klicken, klicken Sie auf "Advanced", und Sie werden feststellen, dass Sie eine Option aktivieren können "referenzierte Assemblys erneut zu verwenden". tun Sie das und Sie haben die volle Kontrolle über Sie DataContracts.

+0

Danke, versuche dies jetzt. – scripni

+0

cool, wie ist es gelaufen? – andy

+0

Es funktioniert, aber nicht in meinem Fall. Einer der Gründe, warum ich die gesamte Geschäftslogik getrennt von der Präsentationsschicht brauchte, war, dass die Geschäftslogik unter .NET 4.0 läuft, während die Website unter .NET 3.5 läuft. Also kann ich keine Referenz haben, die sowohl für die Serviceebene als auch für die Präsentationsebene funktioniert (glaube ich). Danke für die Lösung, es wird nützlich sein, auf anderen Projekten zu wissen. – scripni

0

Leere Client-Referenz-Proxy-Klassen können in der Tat ein frustrierendes Problem zu lösen sein.

Ich würde empfehlen, dass Sie die WCF Test Client oder die Befehlszeile svcutil.exe. gegen den Dienst verwenden - Sie können oft eine viel detailliertere Fehlerbeschreibung mit diesen Tools als mit Visual Studio Service Reference Wizard erhalten.

In meinem Fall sind die Fragen immer zu Serialisierung oder Namespacing Probleme des Unternehmens/Graph bezogen - in der Regel nicht übereinstimmen get und set auf DataMember Eigenschaften, in der graphischen Darstellung KnownType auf polymorphe Einheiten oder zirkuläre Referenzen fehlt.

Teilweise sollte kein Problem sein. Stellen Sie lediglich sicher, dass alle zusätzlichen Eigenschaften, die Sie serialisieren möchten, als DataMember markiert sind.

Wenn alles andere fehlschlägt, empfehlen wir, einen Serialisierungs-/Deserialisierungseinheitstest für Ihr Entitäts-/Entitätsdiagramm auszuführen.

Verwandte Themen