Использование XmlSerializer для сериализации пользовательских ошибок в приложении на основе WCF REST

В моей службе WCF, основанной на отдыхе, я хотел бы создать собственное исключение ошибки и использовать сериализатор XML для сериализации результатов, поскольку у меня есть определенный формат вывода XML для использования.

Я точно следовал онлайн-примерам, но после того, как код выдает исключение, я не получаю ответ в формате xml. Вместо этого я получаю XML-тег с загрузкой html внутри, что выглядит как стандартный ответ сервера под названием «Ошибка запроса». Я получаю текст (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)

У меня есть следующие настройки и классы.

Услуга:

[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);

.. одно из моих условий проверки ошибок в реализации служб...

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

Мой пользовательский класс FaultException:

[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);

        }
    }

Я не могу понять, почему он не отображает сериализованный класс ошибок... если только он не может сериализовать его правильно? Пробовали с очень простым классом, но получили тот же ответ.


person Euston    schedule 18.05.2012    source источник
comment
Вам нужно улучшить 0% принятый курс.   -  person Petar Vučetin    schedule 18.05.2012


Ответы (1)


Ответ: вместо этого используйте класс WebFaultException...............

person Euston    schedule 12.11.2012