application integration - Comment passer des valeurs énumérées à un service Web

Translate

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

Les utilisateurs téléchargent des documents via une application frontale qui se trouve sur le Web. Cette application appelle un service Web de l'application principale et lui transmet le document. L'application back-end enregistre le document et insère une ligne dans leDocumenttable.

Le type de document (7 types de document possibles:Facture d'achat, Contratetc.) est passé en paramètre au service WebUploadDocumentméthode. La question est de savoir quel devrait être le type (et les valeurs possibles) de ce paramètre?

Étant donné que vous devez coder en dur ces valeurs dans les deux applications, je pense que vous pouvez utiliser une chaîne descriptive (Facture d'achat, Contrat, Demande de service, SignéOrdre de travail).

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

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Je ne peux parler que de .net, mais si vous avez un Webservice ASP.net, vous devriez pouvoir y ajouter directement une énumération.

Lorsque vous utilisez ensuite «Ajouter une référence Web» dans votre application client, la classe résultante doit inclure cette énumération

Mais c'est du haut de ma tête, je suis presque sûr de l'avoir fait dans le passé, mais je ne peux pas le dire avec certitude.

La source
Translate

Je suggérerais de ne pas passer un entier entre eux, simplement à des fins de lisibilité et de débogage. Supposons que vous parcouriez vos journaux et que vous voyiez un groupe de 500 erreurs pour DocumentType = 4. Vous devez maintenant rechercher quel DocumentType vaut 4. Ou si l'une des applications fait référence à un numéro qui n'existe pas dans l'autre, peut-être en raison de versions incompatibles.

C'est un peu plus de code, et cela frotte un peu la partie de typage statique du cerveau, mais dans les protocoles en plus de HTTP, la sagesse reçue est de mettre des chaînes lisibles sur des énumérations opaques.

La source
Translate

J'utiliserais toujours l'énumération en interne mais je m'attendrais à ce que les consommateurs me transmettent uniquement le nom, pas la valeur numérique elle-même.

juste un exemple idiot 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);
}
La source
Translate

Dans .NET, les valeurs d'énumération sont (par défaut) sérialisées en XML avec le nom. Pour les instances où vous pouvez avoir plusieurs valeurs (drapeaux), puis il place un espace entre les valeurs. Cela fonctionne parce que l'énumération ne contient pas d'espaces, vous pouvez donc récupérer la valeur en divisant la chaîne (c'est-à-dire "Invoice Contract SignedWorkOrder", en utilisant l'exemple de lubos).

Vous pouvez contrôler la sérialisation des valeurs des services Web asp.net à l'aide duXmlEnumAttribute, ou en utilisant leEnumMemberattribut lors de l'utilisation de WCF.

La source
Translate

Si vous utilisez votre service Web à partir d'une page / application .NET, vous devez pouvoir accéder à l'énumération après avoir ajouté votre référence Web au projet qui consomme le service.

La source
Translate

Si vous ne travaillez pas avec .NET vers .NET SOAP, vous pouvez toujours définir un énumérateur à condition que les deux points de terminaison 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>

C'est à l'outil générateur WSDL -> Proxy de l'analyser en un équivalent enum dans le langage client.

La source
Translate

Il y a de bonnes raisons de ne pas utiliserenums sur une frontière d'interface comme ça. ConsidérerMessage de Daresur le sujet.

La source
Translate

J'ai remarqué que lorsque vous utilisez "Ajouter une référence de service" par opposition à "Ajouter une référence Web" de VS.net, les valeurs d'énumération réelles apparaissent ainsi que les noms d'énumération. C'est vraiment ennuyeux car je dois prendre en charge les clients 2.0 et 3.5. Je finis par devoir entrer dans le code proxy du service Web généré par 2.0 et ajouter manuellement les valeurs d'énumération à chaque fois que je fais un changement!

La source