Wie man aufgezählten Werte an einen Webdienst übergeben

stimmen
20

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

Der Anwender lädt Dokumente über eine Front-End - Anwendung , die auf der Bahn ist. Diese Anwendung erfordert einen Web - Service von der Back-End - Anwendung und leitet das Dokument zu. Das Back-End - App speichert das Dokument und fügt eine Zeile in der Dokumententabelle.

Der Dokumenttyp (7 möglich Dokumentarten: Rechnung , Vertrag etc.) als Parameter zu den wichtigsten übergeben Web - Service UploadDocument Methode. Die Frage ist, was soll die Art (und mögliche Werte) dieses Parameters sein?

Da Sie diese Werte in beiden Anwendungen codieren müssen, ich denke , es ist OK eine beschreibende Zeichenfolge (zu verwenden , Rechnung , Vertrag , Workorder , SignedWorkOrder ).

Ist es vielleicht ein besserer Ansatz zur Schaffung eines Document Aufzählung in der ersten Anwendung, und es auch in der zweiten Anwendung zu reproduzieren, und übergeben Sie dann den entsprechenden ganzzahligen Wert an den Webdienst zwischen ihnen?

Veröffentlicht am 05/08/2008 um 00:43
quelle vom benutzer
In anderen Sprachen...                            


8 antworten

stimmen
6

Ich würde immer noch Aufzählung intern verwenden, aber erwarten würde Verbraucher mir den Namen nur passieren, nicht den numerischen Wert selbst.

nur einige dumme Beispiel zu veranschaulichen:

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

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}
Beantwortet am 05/08/2008 um 01:12
quelle vom benutzer

stimmen
6

Ich würde vorschlagen, gegen eine ganze Zahl zwischen ihnen vorbei, einfach zum Zweck der besseren Lesbarkeit und Debugging. Angenommen, Sie durch Ihre Protokolle gehen und Sie eine Reihe von 500-Fehlern für Document siehe = 4. Jetzt hast du gehen zu schauen was Document ist 4. Oder wenn eine der Anwendungen auf eine Zahl bezieht, die nicht in dem anderen nicht vorhanden ist, vielleicht aufgrund nicht übereinstimmen Versionen.

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

Beantwortet am 05/08/2008 um 00:54
quelle vom benutzer

stimmen
3

Wenn Sie nicht mit .NET arbeiten SOAP auf .NET, können Sie immer noch einen Enumerator definieren bereitgestellt beiden Endpunkte WSDL verwenden.

<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>

Sein bis zu dem WSDL -> Proxy-Generator-Tool, das in eine ENUM äquivalent in der Client-Sprache zu analysieren.

Beantwortet am 08/09/2008 um 00:38
quelle vom benutzer

stimmen
3

Wenn Sie Ihren Web-Service aus einer .NET-Seite / Applikation verbrauchen, sollten Sie in der Lage sein, die Aufzählung zugreifen, nachdem Sie Ihren Web-Verweis auf das Projekt hinzufügen, das den Dienst raubend.

Beantwortet am 05/08/2008 um 02:34
quelle vom benutzer

stimmen
3

In .NET sind Enumerationswerten (standardmäßig) in xml mit dem Namen serialisiert. Für Fälle , in denen Sie mehrere Werte (haben Flags ), dann setzt es einen Raum zwischen den Werten. Das funktioniert , weil die Aufzählung keine Leerzeichen enthält, so dass Sie wieder den Wert erhalten , indem Sie die Zeichenfolge Aufspalten (dh. „Rechnung Vertrag SignedWorkOrder“, lubos dem Beispiel verwendet wird ).

Sie können die Serialisierung der Werte in asp.net Web - Services steuern , um die Verwendung von XmlEnumAttribute oder mit dem EnumMember Attribut , wenn WCF verwenden.

Beantwortet am 05/08/2008 um 02:26
quelle vom benutzer

stimmen
3

Ich kann nur über .net sprechen, aber wenn Sie einen ASP.net Webservice haben, sollten Sie in der Lage sein, eine Aufzählung direkt, um es hinzuzufügen.

Wenn Sie dann mit dem „Add Web Reference“ in Ihrer Client-Anwendung soll die resultierende Klasse, die Enum enthält

Aber das von der Spitze von meinem Kopf, sie ist ziemlich sicher, dass ich es in der Vergangenheit getan habe, aber ich kann nicht sicher sagen.

Beantwortet am 05/08/2008 um 00:56
quelle vom benutzer

stimmen
2

Es gibt einige ziemlich gute Gründe , nicht mit enums an einer Schnittstelle Grenze ähnlich. Betrachten Dares Post zu diesem Thema.

Beantwortet am 08/09/2008 um 13:35
quelle vom benutzer

stimmen
0

Ich habe bemerkt, dass, wenn die Verwendung von „Add Service Reference“ im Gegensatz zu „Add Web Reference“ von VS.net, die tatsächlichen ENUM-Werte kommen über als auch den Enum-Name. Das ist wirklich ärgerlich, da ich beide 2.0 und 3.5-Clients unterstützen müssen. Ich am Ende gehen in den 2.0 generierte Web-Service-Proxy-Code und manuell die ENUM-Werte Hinzufügen jedes Mal, wenn ich eine Änderung vornehmen!

Beantwortet am 08/09/2008 um 00:21
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more