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

Mon dilemme est essentiellement de savoir 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 dorsale et lui transmet le document. L'application principale enregistre le document et insère une ligne dans le tableau Document.

Le type de document (7 types de documents possibles : Facture, Contrat etc.) est passé en paramètre à la méthode UploadDocument du service Web . La question est, quel devrait être le type (et les valeurs possibles) de ce paramètre ?

Puisque vous devez coder en dur ces valeurs dans les deux applications, je pense que c'est OK. d'utiliser une chaîne descriptive (Facture, Contrat, WorkOrder, SignedWorkOrder).

Est-il peut-être préférable de créer une énumération DocumentTypes dans la première application, et de la reproduire également dans la seconde application, puis de transmettre la valeur entière correspondante au service Web entre eux ?

请先 登录 后评论

3 réponses

Peter Burns

Je déconseille de passer un entier entre eux, simplement à des fins de lisibilité et de débogage. Supposons que vous parcourez vos journaux et que vous voyez un tas d'erreurs 500 pour DocumentType=4. Vous devez maintenant chercher quel DocumentType est 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 au-dessus de HTTP, la sagesse reçue est de se ranger du côté des chaînes lisibles plutôt que des énumérations opaques.

请先 登录 后评论
lubos hasko

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);
}
请先 登录 后评论
Seibar

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

请先 登录 后评论