
δίλημμα μου είναι, βασικά, πώς να μοιραστώ μια απαρίθμηση των δύο εφαρμογών.


Οι χρήστες φορτώσετε τα έγγραφα μέσω ενός front-end εφαρμογή που είναι στο διαδίκτυο. Η εφαρμογή αυτή απαιτεί μια διαδικτυακή υπηρεσία του back-end εφαρμογή και περνά το έγγραφο σε αυτό. Το back-end εφαρμογή αποθηκεύει το έγγραφο και εισάγει μια σειρά στο *έγγραφο* πίνακα.


Ο τύπος εγγράφου (7 πιθανούς τύπους εγγράφου: *Τιμολόγιο* , *Συμβόλαιο* κλπ) διέρχεται ως παράμετρος στην υπηρεσία ίντερνετ *UploadDocument* μέθοδο. Το ερώτημα είναι, τι θα έπρεπε το είδος (και πιθανές τιμές) αυτής της παραμέτρου είναι;


Από τη στιγμή που πρέπει να hardcode αυτές τις αξίες και στις δύο εφαρμογές, νομίζω ότι είναι ΟΚ για να χρησιμοποιήσετε ένα περιγραφικό εγχόρδων ( *Τιμολόγιο* , *Συμβόλαιο* , *WorkOrder* , *SignedWorkOrder* ).


Είναι ίσως η καλύτερη προσέγγιση για τη δημιουργία ενός *DocumentTypes* απαρίθμηση στην πρώτη εφαρμογή, και να την αναπαράγουν και στη δεύτερη εφαρμογή, και στη συνέχεια να περάσει την αντίστοιχη ακέραια τιμή για την υπηρεσία web μεταξύ τους;

 
Πώς να περάσει απαριθμούνται τιμές σε μια υπηρεσία web
======================================================



Μπορώ να μιλήσω μόνο για το .net, αλλά αν έχετε ένα Webservice ASP.net, θα πρέπει να μπορείτε να προσθέσετε μια απαρίθμηση απευθείας σε αυτό.


Όταν στη συνέχεια χρησιμοποιήστε το «Add Web αναφοράς» στην Εφαρμογή Πελάτη σας, η προκύπτουσα κατηγορίας θα πρέπει να περιλαμβάνει αυτό το enum


Αλλά αυτό είναι από την κορυφή του κεφαλιού μου, είμαι αρκετά σίγουρος ότι έχω κάνει και στο παρελθόν, αλλά δεν μπορώ να πω με σιγουριά.

 

Θα πρότεινα κατά περνάει έναν ακέραιο μεταξύ τους, απλά για λόγους αναγνωσιμότητας και τον εντοπισμό σφαλμάτων. Ας υποθέσουμε ότι περνάτε τα αρχεία καταγραφής σας και θα δείτε ένα μάτσο 500 σφάλματα για documenttype = 4. Τώρα έχετε να πάτε αναζητήσετε οποία documenttype είναι 4. Ή αν μία από τις εφαρμογές αναφέρεται σε έναν αριθμό που δεν υπάρχει στο άλλο, ίσως λόγω ακατάλληλα εκδόσεις.


Είναι λίγο πιο κώδικας, και τρίβει τη στατική πληκτρολόγηση τμήμα του εγκεφάλου λίγο ωμά, αλλά σε πρωτόκολλα πάνω από HTTP η σοφία είναι να συνταχθεί με ευανάγνωστα χορδές πάνω από αδιαφανή συνόλων.

 

Θα ήθελα να χρησιμοποιήσει ακόμα καταμέτρηση στο εσωτερικό, αλλά θα περίμενε κανείς τους καταναλωτές να μου περάσει μόνο το όνομα, δεν το αριθμητικό ίδια αξία.


μόνο μερικά ανόητα παράδειγμα για να τονίσει:



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

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

```
 

Στη ΝΕΤ, τιμές απαρίθμηση είναι (εξ ορισμού) συνέχειες σε xml με το όνομα. Για τις περιπτώσεις όπου μπορείτε να έχετε πολλαπλές τιμές ( [σημαίες](http://msdn.microsoft.com/en-us/library/system.flagsattribute.aspx) ), τότε βάζει ένα κενό μεταξύ των τιμών. Αυτό λειτουργεί, επειδή η απαρίθμηση δεν περιέχει κενά, ώστε να μπορείτε να πάρετε και πάλι την τιμή με το διαχωρισμό το string (δηλ. «Τιμολόγιο Συμβόλαιο SignedWorkOrder», χρησιμοποιώντας το παράδειγμα Lubos του).


Μπορείτε να ελέγξετε τη σειριακή των τιμών των υπηρεσιών asp.net web χρησιμοποιώντας το [XmlEnumAttribute](http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlenumattribute.aspx) , ή χρησιμοποιώντας το [EnumMember](http://msdn.microsoft.com/en-us/library/system.runtime.serialization.enummemberattribute.aspx) χαρακτηριστικό όταν χρησιμοποιείτε WCF.

 

Αν είστε καταναλώνουν υπηρεσία Web σας από ένα .NET σελίδα / εφαρμογή, θα πρέπει να είναι σε θέση να έχουν πρόσβαση στο απαρίθμηση μετά την προσθήκη αναφοράς στο Web για το έργο που καταναλώνει την υπηρεσία.

 

Έχω παρατηρήσει ότι όταν χρησιμοποιούν το «Add Υπηρεσία αναφοράς» σε αντιδιαστολή με «Καταχώρησε web αναφοράς» από VS.net, οι πραγματικές τιμές απαρίθμησης συναντήσετε καθώς και τα ονόματα απαρίθμησης. Αυτό είναι πραγματικά ενοχλητικό όπως έχω ανάγκη να υποστηρίξει και τις δύο 2.0 και 3.5 των πελατών. Θα καταλήξετε να χρειάζεται να περάσουν στον κώδικα μεσολάβησης υπηρεσίας 2.0 δημιουργείται web και το χέρι προσθέτοντας τις τιμές απαρίθμησης κάθε φορά που κάνετε μια αλλαγή!

 

Αν δεν εργάζεστε με το .NET σε .NET SOAP, μπορείτε να ορίσετε ακόμα ένα απογραφείς υπό την προϋπόθεση ότι και οι δύο τελικά σημεία χρησιμοποιώντας 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>

```

μέχρι το WSDL της -> εργαλείο γεννήτρια μεσολάβησης για να αναλύσει ότι σε ένα ισοδύναμο απαρίθμησης στη γλώσσα του πελάτη.

 

Υπάρχουν μερικοί αρκετά καλοί λόγοι για να μην χρησιμοποιούν `enum`s σε ένα όριο περιβάλλον όπως αυτό. Σκεφτείτε [Τολμήστε το δημοσιεύσετε](http://www.25hoursaday.com/weblog/2005/08/31/WhyYouShouldAvoidUsingEnumeratedTypesInXMLWebServices.aspx) σχετικά με το θέμα.

 