Pregunta

Mi dilema es, básicamente, cómo compartir una enumeración entre dos aplicaciones.

Los usuarios subir documentos a través de un front-end de la aplicación que está en la web.Esta aplicación llama a un servicio web de back-end de la aplicación y pasa el documento a ella.El back-end de la aplicación guarda el documento y se inserta una fila en la Documento tabla.

El tipo de documento (de 7 posibles tipos de documentos: Factura, Contrato etc.) se pasa como parámetro a la web del servicio UploadDocument método.La pregunta es, ¿qué debe hacer el tipo (y de los posibles valores de este parámetro?

Dado que usted necesita para codificar estos valores en ambas aplicaciones, creo que es O. K.el uso de una cadena descriptiva (Factura, Contrato, Orden de trabajo, SignedWorkOrder).

Es tal vez un mejor enfoque para crear un DocumentTypes la enumeración en la primera aplicación, y para reproducir también en la segunda aplicación y, a continuación, pase el valor entero correspondiente al servicio web entre ellos?

¿Fue útil?

Solución

Sólo puedo hablar .net, pero si usted tiene un ASP.net Webservice, usted debería ser capaz de añadir una enumeración directamente a ella.

Cuando, a continuación, utilizar la opción "Agregar Referencia Web" en la Aplicación Cliente, la resultante de la Clase se deben incluir enum

Pero esto es desde la parte superior de mi cabeza, estoy bastante seguro de que he hecho en el pasado, pero no puedo decir seguro.

Otros consejos

Yo sugeriría que en contra de pasar un entero entre ellos, simplemente para fines de mejorar la legibilidad y la depuración.Dicen que van a través de sus registros y ves un montón de 500 errores para DocumentType=4.Ahora tienes que ir a buscar hasta que DocumentType es de 4.O si una de las aplicaciones que se refiere a un número que no existe en el otro, tal vez debido a las versiones no coincidentes.

Es un poco más de código, y se frota la estáticos parte de el cerebro un poco crudo, pero en los protocolos en la parte superior de HTTP la sabiduría recibida es a lado con legible cadenas más opaca de las enumeraciones.

Yo todavía uso la enumeración de forma interna, pero sería de esperar que los consumidores de pasarme solo el nombre, no el valor numérico en sí.

sólo algunos tontos ejemplo para ilustrar:

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

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

En .NET, los valores de enumeración son (por defecto) serializado en xml con el nombre.Para los casos en que puede tener varios valores (banderas), entonces se pone un espacio entre los valores.Esto funciona porque la enumeración no contiene espacios, de modo que usted puede obtener el valor de nuevo por la división de la cadena (es decir."La factura de Contrato SignedWorkOrder", el uso de lubos del ejemplo).

Usted puede controlar la serialización de los valores de en asp.net servicios web usando el XmlEnumAttribute, o mediante la EnumMember atributo cuando el uso de WCF.

Si usted consume el servicio Web de una .NET página/aplicación, usted debería ser capaz de acceder a la enumeración después de agregar tu Web de referencia para el proyecto que está consumiendo el servicio.

Si usted no está trabajando .NET .RED de JABÓN, todavía se puede definir un enumerador siempre que ambos extremos están utilizando 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>

Su hasta el WSDL -> generador de Proxy herramienta para analizar que en un enum equivalente en el idioma del cliente.

Hay algunas bastante buenas razones para no usar enums en una interfaz de límite como esa.Considere la posibilidad de Dare el post sobre el tema.

He notado que cuando uso "Agregar Referencia de Servicio" como opuesto a "Agregar Referencia Web" de VS.net el real enum valores venir a través, así como la enumeración de los nombres.Esto es realmente molesto ya que me necesita tanto el apoyo a 2.0 y 3.5 clientes.Me acaban de tener que ir a la 2.0 generado proxy de servicio web de código y agregar manualmente los valores de enumeración cada vez que hago un cambio!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top