2009-06-10 4 views
2

Ich habe eine WCF-Service-Methode, die ich für Rückgabetyp als Sammlungsart geschrieben habe.Warum sollte der Rückgabetyp einer WCF-Methode von einer generischen Auflistung in ein Array geändert werden?

Wenn ich jedoch eine Proxy-Klasse erzeuge und die Methode vom Client verwende, wird der Rückgabetyp der Methode von einer Sammlung in ein Array geändert.

Warum passiert das?

+0

Ist dies eine FAQ? ein Duplikat? Ich schwöre, ich sah, dass das vorher gefragt und beantwortet wurde. – Cheeso

Antwort

2

Sie müssen svcutil mitteilen, um die Typen als generischen Typ zu generieren, den Sie möchten. Sie tun dies mit dem svcutil Befehl diesen Schalter durch Zusatz:

svcutil ..blah... /ct:System.Collections.ObjectModel.Collection`1 

Die /ct für /collectionType kurz ist. In diesem Fall habe ich Collection<T> angegeben, aber Sie könnten genauso einfach System.Collections.Generic.List<T> verwenden.

1

Wenn Sie den Proxy mithilfe von "Add Service Reference" in Visual Studio generieren, gibt es eine Schaltfläche "Advanced", die ein Dialogfeld öffnet, mit dem Sie angeben können, wie der Rückgabetyp sein soll (einschließlich generische Typen).

0

Wenn Sie Visual Studio verwenden, können Sie einfach mit der rechten Maustaste auf den Dienstverweis klicken, um ihn zu konfigurieren. Sie haben dann eine Option (in den erweiterten Einstellungen?), Um Ihrer App mitzuteilen, wie Arrays als Sammlungen behandelt werden sollen.

5

Erinnern - WCF ist auch ein interoperables System, z.B. Ihr anderes Ende der Leitung könnte ein PHP-, Java- oder Ruby-Client sein, der die generische .NET-Liste nicht verstehen kann!

Sie können angeben, Sie wollen generische Listen mit den beiden Optionen Andrew und Jimmie erwähnt haben - das funktioniert, wenn und nur wenn Sie auch den DataContractSerializer verwenden (was die Standardoption für WCF ist). Wenn Ihr Dienst und/oder Datenvertrag jedoch aus irgendeinem Grund den XmlSerializer verwenden müssen, helfen diese Einstellungen nicht - Ihre Listen werden wieder in Arrays umgewandelt.

Also versuchen Sie diese Optionen gezeigt, und wenn sie für Sie arbeiten - großartig! Aber seien Sie sich bewusst, dass es gute Gründe gibt, warum Ihre generische Liste nur in ein interoperableres Array von Objekten umgewandelt werden muss.

Marc

+0

+1 Schöne Erklärung. –

Verwandte Themen