none
Web Service ASMX muestra un párametro 2 veces y solo lo necesito una vez RRS feed

  • Pregunta

  • Tengo este código en mi web service asmx

    Public Structure AA
        Public Num As String
    End Structure
    
    Public Structure Resp
        Public Ret As String
        Public Men As String
    End Structure
    
    <WebMethod> _
    Public Function RecTab(ByVal dd As List(Of AA)) As Resp
        Dim strucResp As New Resp
    
        'Realizar operaciones
    
        strucResp.Ret = "0"
        strucResp.Men = "Message"
    
        Return strucResp
    End Function

    Cuando publico el web service, en el SOAP 1.1 muestra AA dos veces y solo lo necesito una vez

    <soap:Body>
      <RecTab xmlns="http://tempuri.org">
        <dd>
          <AA>
            <Num>string</Num>
          </AA>
          <AA>
            <Num>string</Num>
          </AA>
        </dd>
      </RecTab>
    </soap:Body>

    He tratado poniendo

    Public Function RecTab(ByVal dd As AA) As Resp

    Pero en el SOAP 1.1 no se muestra AA, lo que obtengo es lo siguiente 

    <soap:Body>
      <RecTab xmlns="http://tempuri.org">
        <dd>
          <Num>string</Num>
        </dd>
      </RecTab>
    </soap:Body>

    Estoy imposibilitado para usar WCF. Necesito los tres niveles, dd, AA y Num, pero solo una vez. Como le hago para obtener esto?

    <soap:Body>
      <RecTab xmlns="http://tempuri.org">
        <dd>
          <AA>
            <Num>string</Num>
          </AA>
        </dd>
      </RecTab>
    </soap:Body>

    Saludos y gracias de antemano


    martes, 14 de abril de 2015 1:57

Respuestas

  • Hola, disculpa la demora.

    Si, ya sabía que la forma mas fácil era que se mapera en SAP de nuevo, pero el personal encargado no quería hacerlo y el problema nos lo transladaban a nosotros.

    Al final, tuve que hacer uso de una politica de la compañia para que el personal SAP aceptará el nuevo mapeo. Con eso se resolvió. Fue bastante complicado que lo aceptaran pero al final se logró.

    Gracias por responder.

    Saludos

    lunes, 20 de abril de 2015 15:03

Todas las respuestas

  • >>Cuando publico el web service, en el SOAP 1.1 muestra AA dos veces y solo lo necesito una vez

    entonces porque defines una lista si solo es una ?

    >>Pero en el SOAP 1.1 no se muestra AA, lo que obtengo es lo siguiente

    no pensaste usando clases en lugar de estructuras

    ademas define propiedades

    Public Class AA
        Public Property Num As String
    End Class
    
    Public Class Resp
        Public Property Ret As String
        Public Property  Men As String
    End Class


    Nota: esta notacion de propiedades solo es valida si usas .net 4 o superior

    Propiedades implementadas automáticamente (Visual Basic)

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 14 de abril de 2015 3:36
  • Gracias por responder, 

    >>Cuando publico el web service, en el SOAP 1.1 muestra AA dos veces y solo lo necesito una vez

    entonces porque defines una lista si solo es una ?

    Respecto a eso, fue lo mismo que pensé, pero desafortunadamente no es un código que haya creado, sino uno heredado y así lo definieron, es decir, no lo creé pero le tengo que dar mantenimiento.

    Respecto a usar propiedades, también ya lo intenté, pero el resultado es el mismo. Si lo pongo como lista se duplica AA y si no, no lo muestra.

    Saludos


    martes, 14 de abril de 2015 13:38
  • hola

    >> Respecto a usar propiedades, también ya lo intenté, pero el resultado es el mismo. Si lo pongo como lista se duplica AA y si no, no lo muestra.

    pero para que necesitas analizar el mensaje SOAP ? expone el servicio y crea un service reference consumiendo el servicio desde codigo mediante el proxy

    que el soap duplique el tag no quiere decir que despues te llegue como dato un solo item en la respuesta cuando lo invocas

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 14 de abril de 2015 13:55
  • Hola,

    Lo analizo porque me esta marcando error al momento de consumirlo. Entiendo lo que dices, de hecho si hago la referencia y lo consumo desde .Net no tengo ni un problema. He hecho pruebas y puedo consumir sin problemas el web service, tanto si duplica el AA como si no lo duplica.

    La cuestión es que el web service es consumido por SAP y cuando hicieron el mapeo en SAP lo establecieron de esta forma

    <soap:Body>
      <RecTab xmlns="http://tempuri.org">
        <dd>
          <AA>
            <Num>string</Num>
          </AA>
        </dd>
      </RecTab>
    </soap:Body>

    Por lo que SAP enviar los datos en el formato anterior marca error porque en el web service o aparace dos veces AA o no aparece ni una.

    Desafortunadamente no es una aplicación que yo haya realizado, ni el mapeo en SAP ni tengo acceso a modifcar en SAP. Solo puedo ajustar el web service para que la comunicación funcione.

    Saludos

    martes, 14 de abril de 2015 16:23
  • >>La cuestión es que el web service es consumido por SAP y cuando hicieron el mapeo en SAP lo establecieron de esta forma

    pero entonces es un problema de SAP que mepearon de forma incorrecta

    ellos como cliente del servicio deberian cambiar como lo definen, no que tu cambies la implementacion

    >>ni el mapeo en SAP ni tengo acceso a modifcar en SAP

    tu no, pero alguien genero ese codigo, bueno seria a quien hay que contactar

    el problema tiene dos partes el servicio y el cliente, el problema aqui esta en SAP no en el servicio web

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 14 de abril de 2015 16:29
  • Hola, disculpa la demora.

    Si, ya sabía que la forma mas fácil era que se mapera en SAP de nuevo, pero el personal encargado no quería hacerlo y el problema nos lo transladaban a nosotros.

    Al final, tuve que hacer uso de una politica de la compañia para que el personal SAP aceptará el nuevo mapeo. Con eso se resolvió. Fue bastante complicado que lo aceptaran pero al final se logró.

    Gracias por responder.

    Saludos

    lunes, 20 de abril de 2015 15:03