Comment transmettre des valeurs énumérées à un service Web

voix
20

Mon dilemme est, en gros, comment partager une énumération entre deux applications.

Les utilisateurs de télécharger des documents par le biais d' une application frontale qui est sur le web. Cette application appelle un service Web de l'application back-end et transmet le document à lui. L'application back-end enregistre le document et insère une ligne dans le document tableau.

Le type de document (7 types de documents possibles: facture , contrat , etc.) est passé en tant que paramètre du service Web UploadDocument méthode. La question est, ce qui devrait le type (et les valeurs possibles) de ce paramètre est?

Puisque vous devez coder ces valeurs dans les deux applications, je pense qu'il est correct d'utiliser une chaîne descriptive ( facture , contrat , WorkOrder , SignedWorkOrder ).

Est - ce peut - être une meilleure approche pour créer une DocumentTypes énumération dans la première application, et de le reproduire aussi dans la deuxième application, puis passer la valeur entière correspondant au service Web entre eux?

Créé 05/08/2008 à 00:43
source utilisateur
Dans d'autres langues...                            


8 réponses

voix
6

Je encore utiliser l'énumération interne mais attendrais les consommateurs à me passer que le nom, pas la valeur numérique elle-même.

quelques-uns exemple stupide pour illustrer:

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

[WebMethod]
public void UploadDocument(string type, byte[] data)
{
  DocumentType docType = (DocumentType)Enum.Parse(typeof(DocumentType), type);
}
Créé 05/08/2008 à 01:12
source utilisateur

voix
6

Je suggère contre le passage d'un nombre entier compris entre eux, simplement à des fins de lisibilité et de débogage. Dites que vous allez dans vos journaux et vous voyez un tas de 500 erreurs pour DocumentType = 4. Maintenant, vous devez aller chercher jusqu'à ce qui est DocumentType 4. Ou si l'une des applications se réfère à un certain nombre qui n'existe pas dans l'autre, peut-être en raison de versions incompatibles.

Il est un peu plus de code, et il se frotte la partie typage statique du cerveau un peu cru, mais dans les protocoles sur le dessus de HTTP la sagesse reçue est à l'autre avec des chaînes lisibles sur énumérations opaques.

Créé 05/08/2008 à 00:54
source utilisateur

voix
3

Si vous ne travaillez pas avec .NET pour .NET SOAP, vous pouvez toujours définir un recenseur fourni deux points d'extrémité utilisent 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>

Son jusqu'à WSDL -> outil générateur de Proxy pour analyser cela en un équivalent ENUM dans la langue du client.

Créé 08/09/2008 à 00:38
source utilisateur

voix
3

Si vous consommez votre service Web à partir d'une page .NET / application, vous devriez être en mesure d'accéder à l'énumération après avoir ajouté votre référence Web au projet qui consomme le service.

Créé 05/08/2008 à 02:34
source utilisateur

voix
3

Dans .NET, les valeurs d'énumération sont (par défaut) sérialisé dans xml avec le nom. Pour les cas où vous pouvez avoir plusieurs valeurs ( drapeaux ), il met un espace entre les valeurs. Cela fonctionne parce que l'énumération ne contient pas d' espaces, de sorte que vous pouvez obtenir à nouveau la valeur en divisant la chaîne ( par exemple. « Facture contrat SignedWorkOrder », en utilisant l'exemple de Lubos).

Vous pouvez contrôler la sérialisation des valeurs de services web asp.net en utilisant le XmlEnumAttribute , ou en utilisant l' EnumMember attribut lors de l' utilisation WCF.

Créé 05/08/2008 à 02:26
source utilisateur

voix
3

Je ne peux parler que .net, mais si vous avez un Webservice ASP.net, vous devriez être en mesure d'ajouter une énumération directement.

Lorsque vous utilisez ensuite le bouton « Ajouter une référence Web » dans votre application client, la classe résultante doit comprendre que ENUM

Mais cela est du haut de ma tête, je suis sûr que je l'ai fait dans le passé, mais je ne peux pas dire à coup sûr.

Créé 05/08/2008 à 00:56
source utilisateur

voix
2

Il y a quelques raisons assez bonnes pour ne pas utiliser enums sur une limite d'interface comme ça. Tenir compte Ose Postes sur le sujet.

Créé 08/09/2008 à 13:35
source utilisateur

voix
0

J'ai remarqué que lors de l'utilisation « Ajouter un service de référence » par opposition à « Ajouter une référence Web » de VS.net, les valeurs enum réelles viennent à travers, ainsi que les noms de ENUM. C'est vraiment ennuyeux que je dois soutenir les 2.0 et 3.5 clients. Je finis par aller dans le code proxy de service Web généré 2.0 et en ajoutant manuellement les valeurs ENUM à chaque fois que je fais un changement!

Créé 08/09/2008 à 00:21
source utilisateur

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