Frage

Ich bin ein HashSet in meine WCF-Schnittstelle mit

[ServiceContract]
public interface IwcfServerSync
{
    [OperationContract]
    void Test(HashSet<int> someHashSet);
}

Wenn ich erstelle einen Dienstverweis die HashSet in einen int dreht [].

Ich habe eine ServiceKnownType:

[ServiceKnownType(typeof(System.Collections.Generic.HashSet<int>))]

und einige wenige Einstellungen versucht, aber konnte nicht ganz machen, es zu ändern.

, wenn ich ändere es hart codierte alles funktioniert, aber es ist wirklich ärgerlich es ein Update jedes Mal zu ändern, meine Referenz ..

Ich bin wahrscheinlich etwas falsch, alle Hinweise oder Ideen zu tun?

War es hilfreich?

Lösung

Kollektionen werden vereinfacht, wenn sie über den Draht gehen. Sie können die Sammlung Typ über die IDE und Befehlszeile (svcutil /collectionType) angeben, aber es wird zu alle Sammlungen auf der API-Anwendung. Ich denke, man sollte es einfach akzeptieren, und die Nichtübereinstimmung durch den Code verarbeiten. Letztes Ende auf dem Draht, sind Sammlungen nur xml (über die Standard-Bindings, zumindest) - so etwas wie:

<items>
   <item ...>...</item>
   <item ...>...</item>
   <item ...>...</item>
</items>

-. Also warum es nicht sagen kann (aus dem Schema) zwischen einem Array (T[]), einem List<T>, einem HashSet<T> und einem MyFunkyCollection<T>

Beachten Sie, dass, wenn Sie Assembly verwenden zu teilen (das heißt die gleiche Servicevertrag Montage auf dem Client ist und Server), dann wird dies nicht passieren - aber das besiegt die Absicht von SOA / mex. Aber ist ist ein Ansatz ziemlich viel verwendet -. Damit die IDE unterstützt direkt und Befehlszeile über einen Schalter (svcutil /reference)


Für die IDE unterstützt es ..., wenn Sie den Service-Vertrag und Datenvertrag in einer Klassenbibliothek (DLL) schreiben, und dann eine Montage Verweis hinzuzufügen (dh eine DLL-Referenz oder ein Projektverweis) in dieser Bibliothek aus den beiden Projekte (das Server-Projekt und das Client-Projekt). Nun fügen Sie ein Dienstverweis von dem Client-Projekt auf den Server-Endpunkt (die SVC). Wenn Sie VS2008 verwenden, wird es automatisch lokale Referenzen für Typen überprüfen und diejenigen, anstelle von Proxy-Generation verwenden - das heißt:. Ihre Kundennummer ein, die IwcfServerSync aus der Klassenbibliothek verwendet, die bereits weiß, ob HashSet<T> usw. zu verwenden,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top