2012-03-28 11 views
2

Ich versuche, einen Restful WCF-Dienst zu erstellen. In meinem WCF-Dienst referenziere ich 1 DLL, die die Datenzugriffsebene enthält.WCF REST-Dienst mit generischer Sammlung

Ich habe die folgende Methode in meine WCF-Klasse

public class Search : ISearch 
{ 

    public List<Product> GetProductList() 
    { 
     ProductDA dataAccess = new ProductDA(); 
     List<Product> obj = new List<Product>(); 
     obj = dataAccess.GetProducts(); 
     return obj; 
    } 

} 

Meine Schnittstelle die Operation hält wie folgt:

[ServiceContract] 
public interface ISearch 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "getProductList", RequestFormat = WebMessageFormat.Xml, ResponseFormat WebMessageFormat.Xml)] 
    List<Product> GetProductList(); 
} 

Wenn ich laufen die URL http://localhost:36741/RestService/Search.svc/getFoodTruckNameList im Browser ich die folgende Fehlermeldung: Der Server hat einen Fehler bei der Verarbeitung der Anfrage festgestellt.

Kennt jemand den richtigen Code zum Aufrufen des [Operators ionContract] für List<Product> GetProductList();?

Vielen Dank im Voraus. Ich ziehe mir eine Zeitlang die Haare aus.

+0

Dieser Fehler bedeutet normalerweise, dass Ihr Code eine Ausnahme ausgelöst hat. Haben Sie versucht, Ihren Web-Service zu debuggen? –

+0

Sie müssen weitere Details zu dem Fehler erhalten, versuchen, den Debugger anzuhängen und die Ausnahmedetails zu veröffentlichen. Heres mein einfaches Beispiel, wie man WCF einrichtet, um Rest zu verwenden, der Ihnen einige Zeiger geben könnte http://blog.staticvoid.co.nz/2012/02/using-rest-wcf-service.html –

Antwort

0

Wir hatten oft Probleme, eine Generic-Liste als Antwort auf einen WCF-Dienst zu senden.

Der einfache Weg, um es zu lösen, ist eine Klasse zu erstellen, die eine einzige Eigenschaft hat, die die Generic-Liste ist, und dann diese Klasse zurückgibt.

[DataContract] 
public class Class1 
{ 
    [DataMember] 
    public List<Foo> Foos { get; set; } 
} 
+1

oder gerade haben Ihre benutzerdefinierte Klasse erbt von 'List '. Dadurch wird verhindert, dass mehr XML-Ebenen als erforderlich erstellt werden. –

+0

@Shiraz Ich denke du bist auf dem richtigen Weg. Können Sie ein Code-Snippet bereitstellen, um die Klasse zu erstellen, die über eine einzelne Eigenschaft verfügt, bei der es sich um die Liste "Generic" handelt, und diese Klasse dann zurückgibt? Danke Mann ... – midnightCoder

+0

@M. Babcock Sie auch ich thnik gehe in die richtige Richtung von dem, was ich vorher recherchiert habe. Könnten Sie den Code angeben, wo er erben soll? Ich meine, es wäre keine öffentliche Klasse Suche: ISearch: Liste richtig? – midnightCoder

3

an meinem RESTful Web Services suchen, das etwas tun, das tue ich normalerweise etwas näher an:

[ServiceContract] 
public interface ISearch 
{ 
    [OperationContract] 
    [WebGet(UriTemplate = "getProductList", RequestFormat = WebMessageFormat.Xml, ResponseFormat WebMessageFormat.Xml)] 
    Products GetProductList(); 
} 

Und dann:

[CollectionDataContract] 
public class Products : List<Product> 
{ 
    public Products(IEnumerable<Product> products) : base(products) { } 
} 

Dann ist Ihre Schnittstelle sein würde, Wartungsvertrag würde wie folgt aussehen:

public class Search : ISearch 
{ 
    public Products GetProductList() 
    { 
     return new Products(new ProductDA().GetProducts()); 
    } 
} 
+0

Meine einzige Verwirrung hier ist der erste Abschnitt [CollectionDataContract] public class Produkte: Liste { öffentliche Produkte (IEnumerable Produkte): base (Produkte) {}} Mein WCF-Dienst eine DLL ist referncing das hält die Produktdatenobjekte und die DAL. Ist das, wo der obige Code wäre? – midnightCoder

+0

Das ist, wo ich es in meine Projekte stecke, aber wenn du es lieber in deinen BLL steckst, würde es wahrscheinlich auch dort funktionieren. –

+0

Ich bevorzuge es, die DLL mit dem Datenobjekt und DAL allein zu halten. Immer noch verwirrt in diesem Teil, aber ich werde einen Blick später auf diesen Abend werfen und sehen, ob ich es zum Laufen bringen kann .. Danke. – midnightCoder

Verwandte Themen