Da Entwickler wissen, dass wir List<T>
mit Web-Services nicht zurückgeben können, können wir nur Listen mit der Umwandlung in .ToArray(); Ich habe einige durchsucht, kann aber keine effektive Antwort darüber erhalten, warum wir List mit Web-Services nicht neu starten können. Warum müssen wir sie ToArray() konvertieren; ?Warum können wir die Liste <T> in ASMX-Webdiensten nicht zurückgeben?
Antwort
Webdienste sollen mit vielen Sprachen kompatibel sein. Fast alle Sprachen haben Arrays, aber nur .NET hat die spezifische Implementierung von List<T>
, die Sie verwenden.
Also meinst du wegen der Sprachstandards, verwenden wir Array meist ?? –
Ich meine, dass Web-Services nicht zulassen, dass Sie nur .NET-Typen standardmäßig verwenden, da der Code, der den Web-Service aufruft, möglicherweise nicht .NET ist. Wie Stefan P. darauf hingewiesen hat, können WCF (nicht asmx) Webdienste angeben, dass der Client .NET ist. In diesem Fall können Sie .NET-spezifische Typen wie 'List
Ihre Antwort ergibt Sinn. Sie haben Recht, aber meiner Meinung nach, wenn die Liste
Es hängt von den Interoperabilitätseinstellungen des Webdienstes ab, ein Objekt wie int[]
ist für eine Nicht-.NET-Sprache einfacher zu verstehen als List<int>
. Wenn Sie Ihren Web-Service unter WCF entwickeln, wird List<T>
als Rückgabetyp unterstützt.
Hmm Ihre Antwort ist in der Nähe von Joel Mueller's Antwort .. –
Was in den Webdiensten beschrieben wird, ist eine "Sammlung". Es hängt vom Client ab, welche Art von "Sammlung" zu verwenden ist. Wenn die .NET-Adresse des Clients angezeigt wird, klicken Sie beim Hinzufügen der Dienstreferenz auf Erweitert, und Sie können eine allgemeine Liste auswählen.
Es gibt überhaupt nichts, was Sie davon abhält, List<T>
von einem ASMX-Webservice zurückzugeben. Ich habe keine Ahnung, warum du das glaubst.
Was Sie möglicherweise verwirren ist, dass XML-Schema (von der WSDL verwendet) kann nicht "Listen" an sich beschreiben. In der Tat kann es auch keine Arrays beschreiben. Es kann eine Reihe sich wiederholender Elemente beschreiben. Alle Auflistungen, einschließlich Arrays, werden als Sätze sich wiederholender Elemente zurückgegeben.
Auf der Client-Seite hat der Client keine Möglichkeit zu wissen, ob der Server auch List<T>
, T[]
oder IEnumerable<T>
zurückgegeben hat, und keinen Grund zur Vorsicht.
Soweit ich weiß, solange Sie explizit erklären, dass Sie einen List (of T) Method Titel zurückgeben, können Sie das Objekt zurückgeben; Andernfalls erhalten Sie einen Serialisierungsfehler.
beispiels
<WebMethod()> _
Public Function Search(ByVal SearchTerm As String) As List(Of 'object here')
Welche Art von Web-Service erstellen Sie? Das heißt, welche Technologie verwendet es? WCF? ASMX? – Gabe
@Gabe ich meine asmx nicht wcf –