none
Porque Aparece el <![CDATA[ en un Xdocument RRS feed

  • Pregunta

  • Buenas Tardes 

    tengo un pequeno problema he desarrollado un servicio WCF para una integracion con un Bus de Servicios y todo iba bien pero en algunos metodos que retornas datos me los han pedido que los pinte en estructura XML lo he hecho usando Xdocument asi

    XDocument Arbolmsj = new XDocument(
                                       new XElement("mensaje",
                                       new XElement("PersonNumber", obj.PERSNO),
                                      new XElement("PersonFirstName", obj.FIRSTNAME),
                                      new XElement("PersonLastName", obj.FIRSTNAME),
                                      new XElement("PersonLastName", obj.LASTNAME),
                                      new XElement("CompanyNo", COMPANYNO),
                                      new XElement("PersonJob", obj.JOB),
                                      new XElement("PersonClass", obj.PERSCLASS),
                                      new XElement("Vigencia", objc.AUTHUNTIL),
                                      new XElement("Codigo_Estado", 2),
                                      new XElement("Status_Registro", "Registro Activo"))

    Hasta ahi no hay problema como el metodo es de tipo string  le hago un tostring a Arbolmsj para retornar un string pero al momento de probar el metododo me esta poniendo una etiquerta <![CDATA[ y el Bus de Servicio lo rechaza, porque se puede dar esto y como la quitaria

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
       <s:Body>
          <GetObtenerBPResponse xmlns="http://tempuri.org/">
             <GetObtenerBPResult><![CDATA[<mensaje>
      <PersonNumber>NULL</PersonNumber>
      <PersonFirstName>NULL</PersonFirstName>
      <PersonLastName>NULL</PersonLastName>
      <PersonLastName>NULL</PersonLastName>
      <CompanyNo>NULL</CompanyNo>
      <PersonJob>NULL</PersonJob>
      <PersonClass>NULL</PersonClass>
      <Vigencia>NULL</Vigencia>
      <Codigo_Estado>0</Codigo_Estado>
      <Status_Registro>Registro No Existente</Status_Registro>
    </mensaje>]]></GetObtenerBPResult>
          </GetObtenerBPResponse>
       </s:Body>
    </s:Envelope>

    Agradezco sus comentarios

    Atentamente

    Carlos Hernandez

    • Cambiado Laura Ceglz viernes, 9 de septiembre de 2016 14:54
    jueves, 8 de septiembre de 2016 22:53

Todas las respuestas

  • hola

    es que para comunicarte con WCF debes usar SOAP y este es un estandar xml

    no puedes armar un xml y hacer el ToString() para enviarlo al servicio porque eso seria un xml como string que dentro del mensaje soap que es un xml lo tomara como una cadena

    el CDATA justamente lo que indica es eso que estas enviando una cadena

    se supone que el metodo que recibe la invocacion de lado del servicio tomara un parametro como string y parseara el xml que le llegue

    cuando invocas al servicio imagino tienes el WSDL que describe la funcionalidad que expone, si es asi podrias crear un web reference y ver de que tipo de parametro espera el metodo que el servicio WCF expone

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    viernes, 9 de septiembre de 2016 4:31
  • Buen Dia Leandro

    Mira quise no me explique bien, este es mi metodo que originalmente retorna un string

                                         

    public  string GetInactivaPerson(string user, string passw,int person_status,string cod_Bp)
            {
                string mensaje;

                DataClassBoschDataContext db = new DataClassBoschDataContext();

                string Valida;
                Valida = logon(user, passw);


                if (Valida == "Ha Ingresado a Bosch") 
                {


                    try
                    {
                        //Cualquier cambio implica deshabilitar el registro se toma como campo where el documento Ing CH
                        PERSON obj = db.PERSONs.Single(person => person.RESERVE6 == cod_Bp);

                        // De acuerdo al requerimiento se actualiza el Estado Ing. CH
                        obj.STATUS = person_status;
                        obj.DATEUPDATED = DateTime.Now;
                        db.SubmitChanges();

                        XDocument msj = new XDocument(
                     new XElement("mensaje",
                   new XElement("mensaje","Se ha  deshabilitado el registro actual"),
                   new XElement("Estado", "1"))
                   );

                        mensaje = msj.ToString().Replace("<![CDATA[", "");
                        //mensaje1 = msj.ToString().Replace("]]>", "");
                        //mensaje = mensaje1;
                        // mensaje = msj.ToString();
                    }
                    catch (Exception ex)
                    {
                        XDocument msj = new XDocument(
                        new XElement("mensaje",
                        new XElement("El codigo BP no Existe:",cod_Bp),
                          new XElement("Excepcion", ex.Message),
                           new XElement("Estado", "0"))
                          );
                        //mensaje = msj.ToString().Replace("<!\\[CDATA\\[", "");
                        //mensaje = msj.ToString().Replace("]]>", "");
                        //mensaje = mensaje;
                        mensaje = msj.ToString();



                    }

                }
                else
                {
                    XDocument msj = new XDocument(
                       new XElement("mensaje",
                      new XElement("mensaje","Revise sus Parametros de Autenticacion"),
                      new XElement("Estado", "0"))
                      );



                    mensaje = msj.ToString();
                }

    Me han pedido que ell mensaje que retornan los metodos sea de tipo XML, entonces por eso contruyo un XDocument y despues para recibirlo en mi variable que es tipo String le hago un conver a ese Xdocument retornado a string, entiendo por lo que me dices que ahi radica el problema.  Pero la verdad no encuntro entonces de que tipo debe ser mi metodo para que me funcione ok.   Quedo atento a tus comentarios


    Carlos Alberto Hernández R. CEO -Xtreme Business Solutions Movil: 3102334026 Bogota- Colombia

    lunes, 12 de septiembre de 2016 16:01
  • Buenas Tardes

    Les comparto que ya solucione el tema, lo que hice fue declarar los metodos de TIpo XElement y retornar informacion de este tipo.

    Mil gracias por los APortes


    Carlos Alberto Hernández R. CEO -Xtreme Business Solutions Movil: 3102334026 Bogota- Colombia

    jueves, 15 de septiembre de 2016 21:31