Uso de XMlSerializer para seriailze fallas personalizadas en la aplicación basada en el resto de WCF

StackOverflow https://stackoverflow.com//questions/10655983

Pregunta

En mi servicio WCF basado en el resto, me gustaría lanzar una excepción de fallas personalizadas y usar XML Serializer para serializar los resultados, ya que tengo un formato de salida XML específico para usar.

He seguido exactamente los ejemplos en línea, pero después de que el código lanza una excepción, no obtengo una respuesta con formato XML.En su lugar, obtengo una etiqueta XML con una carga de HTML en su interior en lo que parece ser una respuesta estándar del error de solicitud de Titulado Servidor.El texto que obtengo es (etiquetas HTML):

The server encountered an error processing the request. The exception message is 'Error 123'. See server logs for more details. The exception stack trace is:
at CSW.Services.CheckForCatalogueFaults(String request, String service) in C:\netDev\CatalogueService\CatalogueService\Services.svc.cs:line 64
at CSW.Services.GetCapabilities(String request, String version, String service) in C:\netDev\CatalogueService\CatalogueService\Services.svc.cs:line 69
at SyncInvokeGetCapabilities(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

Tengo los siguientes ajustes y clases.

Servicio:

[OperationContract]
        [XmlSerializerFormat(SupportFaults = true)]
        [FaultContract(typeof(CatalogueFaultContract))]
        [WebGet(BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "/csw?REQUEST={request}&VERSION={version}&SERVICE={service}")]
        Capability GetCapabilities(string request,string version, string service);

.. Una de mis condiciones de verificación de errores en la implementación de servicios ...

 if (string.IsNullOrEmpty(request))
            {
                cswFault.Exception = new CswException("MissingParameterValue", "request");
                cswFault.ErrorMsg = "Error";
                     throw new FaultException<CatalogueFaultContract>(cswFault);
            }

Mi clase de excepciones personalizadas:

[XmlRoot(ElementName = "ExceptionReport",Namespace="http://www.opengis.net/ows")]
    public class CatalogueFaultContract 
    {
        [XmlNamespaceDeclarations]
        public XmlSerializerNamespaces Ns;

        [XmlAttribute(AttributeName = "Version")]
        public string Version = "1.0.0";

        [XmlElement(Namespace = "http://www.opengis.net/ows")]
        public CswException Exception { get; set; }

        [XmlAttribute(Namespace = XmlSchema.Namespace, AttributeName = "schemaLocation")]
        public string xsiSchemaLocation = "http://www.opengis.net/ows http://schemas.opengis.net/ows/1.0.0/owsExceptionReport.xsd";

        [XmlIgnore]
        public string ErrorCode { get; set; }
        [XmlIgnore]
        public string ErrorMsg { get; set; }

        public CatalogueFaultContract()
        {}


        public CatalogueFaultContract(string errorCode,string locator)
        {

            Ns = new XmlSerializerNamespaces();
            Ns.Add("", "");
            Ns.Add("ows", "http://www.opengis.net/ows");

            Exception=new CswException(errorCode,locator);

        }
    }

No puedo averiguar por qué no está mostrando la clase de falla serializada ... a menos que no pueda serloializarlo correctamente?He intentado con una clase muy simple, pero obtén la misma respuesta.

¿Fue útil?

Solución

Respuesta: Use una clase de WebFaultException en su lugar ..............

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