none
Prefijo del Namespace en el primer tag de mi Web Service RRS feed

  • Pregunta

  • Hola, he creado un Web Service el cual tiene que ser igual a uno ya existente solo que el mio tiene funcionalidad extra. El caso es que el actual tiene esta forma:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:eng="urn:hpexstream-services/Engine">
       <soapenv:Header/>
       <soapenv:Body>
          <eng:Compose>
             <!--Optional:-->
             <EWSComposeRequest>
                <!--Optional:-->
                <driver>
                   <!--Optional:-->
                   <driver>?</driver>
                   <!--Optional:-->
                   <fileName>?</fileName>
                </driver>
                <!--Zero or more repetitions:-->
                <engineOptions>
                   <!--Optional:-->
                   <name>?</name>
                   <!--Optional:-->
                   <value>?</value>
                </engineOptions>
                <includeHeader>?</includeHeader>
                <includeMessageFile>?</includeMessageFile>
                <!--Optional:-->
                <pubFile>?</pubFile>
             </EWSComposeRequest>
          </eng:Compose>
       </soapenv:Body>
    </soapenv:Envelope>

    Y el mio es asi:

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:eng="urn:hpexstream-services/Engine">
       <soapenv:Header/>
       <soapenv:Body>
          <eng:Compose>
             <!--Optional:-->
             <eng:EWSComposeRequest>
                <!--Optional:-->
                <eng:driver>
                   <!--Optional:-->
                   <eng:driver>?</eng:driver>
                   <!--Optional:-->
                   <eng:fileName>?</eng:fileName>
                </eng:driver>
                <!--Optional:-->
                <eng:engineOptions>
                   <!--Zero or more repetitions:-->
                   <eng:engineOptions>
                      <!--Optional:-->
                      <eng:name>?</eng:name>
                      <!--Optional:-->
                      <eng:value>?</eng:value>
                   </eng:engineOptions>
                </eng:engineOptions>
                <eng:includeHeader>?</eng:includeHeader>
                <eng:includeMessageFile>?</eng:includeMessageFile>
                <!--Optional:-->
                <eng:pubFile>?</eng:pubFile>
             </eng:EWSComposeRequest>
          </eng:Compose>
       </soapenv:Body>
    </soapenv:Envelope>

    Si pueden notar, mi xml contiene en los nodos hijo del tag Compose, el prefijo 'eng'. Pero el xml original no lo tiene. Como puedo hacer esto en mi Web Service?

    Mi codigo es mas o menos asi:

    //Here using definitions
    public delegate actualizaResponse TareaAsincDelegado(EWSComposeRequest a);

    [WebService(Namespace = "urn:hpexstream-services/Engine")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class Service : System.Web.Services.WebService
    {
        public object EstadoPrevio;
        public TareaAsincDelegado dlg;
        //Begin
        [WebMethod()]

        public IAsyncResult BeginCompose(EWSComposeRequest EWSComposeRequest, AsyncCallback cb, object s)
        {
            TareaAsincDelegado dlg = new TareaAsincDelegado(Tarea);
            Service ms = new Service();
            ms.dlg = dlg;
            ms.EstadoPrevio = s;

            return dlg.BeginInvoke(EWSComposeRequest, cb, ms);
        }

        //End
        [WebMethod]
        public actualizaResponse EndCompose(IAsyncResult call)
        {
            Service ms = (Service)call.AsyncState;
            return ms.dlg.EndInvoke(call);
        }

        private actualizaResponse Tarea(EWSComposeRequest a)
        {

        //DO SOMETING

            return output;
        }

    }



    //----Request--------
    public class Compose {
        public EWSComposeRequest EWSComposeRequest { get; set; }
        public bool includeHeader { get; set; }
        public bool includeMessageFile { get; set; }
        public string pubFile { get; set; }
    }
    public class EWSComposeRequest
    {
        public _driver driver { get; set; }
        public List<engineOptions> engineOptions { get; set; }
        public bool includeHeader { get; set; }
        public bool includeMessageFile { get; set; }
        public string pubFile { get; set; }
    }
    public class _driver {
        public byte[] driver { get; set; }
        public string fileName { get; set; }
    }

    public class engineOptions {
        public string name { get; set; }
        public string value { get; set; }
    }

    Alguna idea de como puedo hacerlo?

    O simplemente no puedo hacerlo con .NET?

    Agradesco por anticipado sus aportaciones.

    Saludos!!!!

    miércoles, 25 de noviembre de 2015 17:55

Todas las respuestas

  • hola

    cual es el problema en el xml generado por soap ?

    se supone que consumes el servicio mediente un service reference, como arme el xml de soap no deberia afectarte

    cuando invocas desde el cliente el servicio deberias recibir una entidad

    lo que no entendi es porque mencionas un actual ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 25 de noviembre de 2015 18:07
  • Gracias por tu respuesta Leandro.

    'Actualmente' ya hay un Web Service pero carece de una funcionalidad que yo implemente en un 'Nuevo' Web Service. Mi Web Service, servira como puente para ejecutar el viejo Web Service sin embargo el mio incluye una funcionalidad que el viejo Web Service no tiene.

    Estoy de acuerdo con tu respuesta, sin embargo desconosco como es que el cliente esta consumiendo el Web Service Actual. Tambien pude asumir que hacen un Service Reference pero el cliente es muy limitado con los detalles y solicita que el nuevo Web Service sea Exactamente Igual al viejo WebService.

    El cliente argumenta que no se pueden dar el lujo de 'Incompatibilidad'. Y por esa razon, estoy buscando que mi Web Service tenga el mismo Request que el viejo.

    Es posible que mi Web Service, solo tenga el prefijo 'eng' en el nodo padre?

    Saludos!

    miércoles, 25 de noviembre de 2015 18:25
  • hola

    >>'Actualmente' ya hay un Web Service pero carece de una funcionalidad que yo implemente en un 'Nuevo' Web Service. Mi Web Service, servira como puente para ejecutar el viejo Web Service sin embargo el mio incluye una funcionalidad que el viejo Web Service no tiene.

    pero entonces son dos servicios diferentes,  porque necesitas que el xml de soap sea igual ?

    cada servicio es independiente del otro

    >>desconosco como es que el cliente esta consumiendo el Web Service Actual

    como lo este consumiendo esta claro que va a tener que actualizar la referencia o al menos checkear si la invocacion sigue funcionando

    dudo que publiques el nuevo servicio y salga todo sobre ruedas

    >>El cliente argumenta que no se pueden dar el lujo de 'Incompatibilidad'

    pero entonces deberias haber usado WCF para poder implementar la funcionalidad de versionado, un asmx esta algo limitado en este aspecto

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    miércoles, 25 de noviembre de 2015 19:41
  • Buen dia Leandro.

    a.- Mi Web Service 'simulara' ser el actual Web Service. Dentro de mi desarrollo hago referencia al WS actual para ejecutar 'un unico metodo' y adicional a esto hacer una tarea extra. Podria hacerlo con el WS actual pero pertenece a un provedor y su codigo es cerrado.

    b.-Tabien tengo mis dudas respecto a que funcione todo sobre ruedas. Lo que busca el cliente es cambiar la direccion en el sistema que hace el Request, del actual WS al nuevo WS pero son muy nerviosos de cualquier cambio pues consideran que sus procesos son muy criticos.

    c.- Me recomiendas mejor usar WCF?

    Desde mi punto de vista mi XML deveria funcionar, sin embargo aun no puedo cumplir con el requisito del cliente respecto a que sea igual al XML del WS actual.

    Con la finalidad de cumplir con su requisito. Tienes alguna idea de como lograr que el prefijo 'eng' solo aplique en el tag Compose?

    jueves, 26 de noviembre de 2015 18:03
  • Hola! aunque el post ya es bastante viejito quisiera saber si pudiste resolver lo que necesitabas? Tengo exactamente la misma necesidad que tu planteas y quisiera me ayudaras indicandome si pudiste encontrar alguna solución a lo planteado.
    miércoles, 11 de julio de 2018 17:48