Frage

Mein dilemma ist, im Grunde, wie zu teilen eine Aufzählung zwischen zwei Anwendungen.

Die Nutzer hochladen von Dokumenten über eine front-end-Anwendung wird auf dem web.Diese Anwendung ruft einen web-service von der back-end-Anwendung und übergibt das Dokument an Sie.Die back-end-app speichert das Dokument und fügt eine Zeile in die Dokument Tabelle.

Die Art des Dokuments (7 mögliche Dokumenttypen: Rechnung, Vertrag etc.) als parameter übergeben wird, um den web-service UploadDocument Methode.Die Frage ist, was soll das geben (und die möglichen Werte dieser parameter werden?

Da müssen Sie fest, dass diese Werte in beiden Anwendungen, denke ich, es ist O. K.verwenden Sie einen beschreibenden string (Rechnung, Vertrag, WorkOrder, SignedWorkOrder).

Ist es vielleicht eine bessere Methode zum erstellen einer DocumentTypes die Aufzählung in der ersten Anwendung und zu reproduzieren es auch in der zweiten Anwendung, und übergeben Sie dann den entsprechenden integer-Wert, um den web-service zwischen Ihnen?

War es hilfreich?

Lösung

Ich kann nur darüber sprechen .net, aber wenn Sie eine ASP.net Webservice, sollten Sie in der Lage zu hinzufügen eine Aufzählung direkt an ihn.

Wenn Sie dann benutzen Sie die "Add Web Reference" in Ihre Client-Anwendung, die resultierende Klasse umfassen sollte, die enum

Dies ist aber aus der Spitze von meinem Kopf, ich bin mir ziemlich sicher, dass ich es getan habe, in der Vergangenheit, aber ich kann nicht sicher sagen.

Andere Tipps

Ich würde vorschlagen, gegen die übergabe einer Ganzzahl zwischen Ihnen, nur für die Zwecke der besseren Lesbarkeit und Debuggen.Sagen du gehst, durch Ihr meldet und Sie sehen eine Menge von 500-Fehler für DocumentType=4.Jetzt haben Sie zu gehen, welche DocumentType ist 4.Oder wenn eine der Anwendungen bezieht sich auf eine Zahl, die nicht existieren in die andere, vielleicht aufgrund der nicht übereinstimmenden Versionen.

Es ist ein bisschen mehr code, und es reibt sich die statische Typisierung Teil des Gehirns ein wenig roh, aber in Protokolle, die auf HTTP die empfangene Weisheit ist die Seite mit lesbaren Zeichenfolgen über undurchsichtige Aufzählungen.

Ich würde immer noch verwenden die Aufzählung innerlich, würde aber erwarten, dass die Verbraucher geben mir nur den Namen, nicht den numerischen Wert an sich.

nur ein paar alberne Beispiel zur Verdeutlichung:

public enum DocumentType
{
  Invoice,
  Contract,
  WorkOrder,
  SignedWorkOrder
}

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}

In .NET, Enumerationswerte sind (standardmäßig) in xml serialisiert mit dem Namen.Für Instanzen, in denen können Sie mehrere Werte (flags), dann es bringt einen Raum zwischen den Werten.Dies funktioniert, da die Aufzählung nicht enthalten, Leerzeichen, so können Sie den Wert wieder durch die Spaltung der Zeichenfolge (dh."Rechnung-Vertrag SignedWorkOrder", mit lubos Beispiel).

Sie können die Serialisierung von Werten in asp.net web-Dienste mit Hilfe der XmlEnumAttribute, oder mit der EnumMember Attribut bei der Verwendung von WCF.

Wenn Sie verbrauchen Sie Ihren Web-service aus .NETTO Seite/Anwendung sollten Sie in der Lage sein, um Zugriff auf die Aufzählung nach Sie fügen Ihrem Web-Verweis auf das Projekt verbraucht der Dienst.

Wenn Sie nicht arbeiten .NET .NET SOAP, kann man noch definieren, die einen enumerator, sofern beide Endpunkte werden mit WSDL.

<s:simpleType name="MyEnum">    
     <s:restriction base="s:string">
          <s:enumeration value="Wow"/>
          <s:enumeration value="This"/>
          <s:enumeration value="Is"/>
          <s:enumeration value="Really"/>
          <s:enumeration value="Simple"/>
     </s:restriction>
</s:simpleType>

Die WSDL -> Proxy-generator-tool zu analysieren, die in einem enum-äquivalent in der client-Sprache.

Es gibt einige ziemlich gute Gründe, nicht mit enums auf einem interface boundary wie, dass.Betrachten Dare ' s post auf das Thema.

Ich habe bemerkt, dass bei der Verwendung von "Add Service Reference" als Gegensatz zu "Add Web Reference" aus VS.net die tatsächliche enum-Werte stoßen, als auch den enum-Namen.Das ist wirklich ärgerlich, da brauche ich Unterstützung von 2.0 und 3.5-clients.Ich am Ende mit zu gehen in der 2.0 generierten web-service-proxy-code und manuell hinzufügen die enum-Werte jedes mal, wenn ich eine änderung vornehmen!

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