Estoy tratando de escribir un servicio web para las especificaciones y requiere un cuerpo de respuesta diferente dependiendo de si el método se completa con éxito o no. He intentado crear dos clases diferentes de DataContract, pero ¿cómo puedo devolverlas y hacer que se serialicen correctamente?¿Hay alguna manera de devolver diferentes tipos de un método WCF REST?
Respuesta
La respuesta es sí pero es complicado y se pierde una gran escritura en su interfaz. Si devuelve un Stream, los datos podrían ser xml, texto o incluso una imagen binaria. Para las clases de DataContract, debe serializar los datos usando DataContractSerializer.
Vea el BlogSvc y más específicamente el RestAtomPubService.cs WCF service para más detalles. Tenga en cuenta que ese código fuente también le mostrará cómo aceptar diferentes tipos de datos en un método de descanso WCF que requiere un mapeador de tipos de contenido.
Si está utilizando un enlace basado en xml, entonces creo que no hay forma de hacerlo. Una solución simple en ese caso sería simplemente tener parte del indicador de mensaje si hubiera una falla, y almacenar la información de falla en algún lugar si fuera necesario. Para un enlace JSON, puede usar un método que devuelve un objeto y luego devolver dos tipos diferentes de objetos. Si recuerdo correctamente (lo cual es raro), eso es posible porque la clase JavaScriptSerializer usa la reflexión si el objeto está limpio de atributos de serialización.
La mejor manera de indicar que su servicio web WCF ha fallado sería lanzar una FaultException. Hay configuraciones en los archivos web.config de su servicio que permiten que todo el mensaje de error pase al cliente como parte del error.
Otro enfoque puede ser heredar ambos resultados de la misma clase base o interfaz. El servicio devolvería una instancia del tipo base. A continuación, puede utilizar el atributo KnownType para informar al cliente que pueden devolverse varios tipos. Ahora que lo pienso, podría ser posible usar Object como tipo base, pero no lo he intentado.
Al fallar cualquiera de estos enfoques, puede crear un objeto de resultado personalizado que contenga tanto un resultado como propiedades de error y su cliente podrá entonces decidir qué curso de acción tomar. Tuve que usar este enfoque para Silverlight 2 porque Beta 2 aún no admite completamente los contratos de falla. No es bonito, normalmente no lo recomendaría, pero si es la única manera de hacerlo funcionar o sientes que es el mejor enfoque para tu situación ...
Si tienes problemas con ADO.NET Data Services, Tengo menos experiencia allí.
Here's some information en FaultContracts ejecución
- 1. ¿Hay alguna manera de tener diferentes vistas en un NSCollectionView?
- 2. ¿Hay alguna manera de identificar un método heredado en Python?
- 3. ¿Hay alguna manera de escribir un Método de extensión que se aplique a varios tipos?
- 4. ¿Cómo puedo devolver un código de estado HTTP personalizado desde un método WCF REST?
- 5. ¿Hay alguna manera de recorrer una estructura con elementos de diferentes tipos en C?
- 6. ¿Hay alguna manera de "anular" un método con la reflexión?
- 7. ¿Hay alguna forma de devolver el tipo anónimo del método?
- 8. ¿Hay alguna manera de concaturar los tipos anónimos de C#?
- 9. WCF: ¿Hay alguna manera de eliminar el campo ExtensionData?
- 10. Al usar CSS, ¿hay alguna forma de mostrar diferentes caracteres con diferentes tipos de letra?
- 11. ¿Alguna manera de invocar un método privado?
- 12. ¿Hay alguna manera de implementar tipos algebraicos en Java?
- 13. ¿Hay alguna manera de usar JSONP con un servidor REST Delphi DataSnap?
- 14. ¿Hay alguna manera de conocer el método de invocación?
- 15. ¿Hay alguna manera en Python para devolver un valor a través de un parámetro de salida?
- 16. Tipos anónimos - ¿Hay alguna característica de distinción?
- 17. iPhone: ¿Hay alguna manera de cargarFromNib Y tener un reuseIdentifier?
- 18. ¿Hay alguna manera de construir implícitamente un tipo en C#?
- 19. ¿Hay alguna manera de negar un predicado?
- 20. ¿Hay alguna manera de obtener datos ortográficos de un NSString?
- 21. una imagen de un servicio WCF REST
- 22. ¿Hay alguna manera de exponer múltiples servicios de WCF a través de un punto final único?
- 23. Devolver conjuntos de datos de LINQ a SQL en un servicio REST/WCF
- 24. ¿Hay alguna manera de almacenar múltiples tipos de datos en una única variable hashtable?
- 25. Cómo obtener una función para devolver diferentes tipos
- 26. WCF REST RequestInterceptor authentication
- 27. ¿Hay alguna manera de omitir el parámetro?
- 28. Devolver JSON envuelto en una función de devolución de llamada desde un servicio web WCF REST
- 29. ¿Hay alguna manera de obtener el tamaño de un archivo en .NET usando un método estático?
- 30. ¿Hay alguna manera de atrapar un intento de acceder a una propiedad o método inexistente?
No encontré ese archivo (RestAtomPubService.cs) en la fuente, ¿lo perdí o lo he eliminado? Gracias. –
Desde entonces, nos hemos alejado de WCF para REST porque no era lo suficientemente flexible para nuestras necesidades. Creo que el archivo aún debería estar allí en la historia. – JarrettV