none
manejo de prefijos y namespaces en servicios WCF RRS feed

  • Pregunta

  • Buenas tardes,

    Agradezco su colaboración con el siguiente problema; Actualmente tengo un servicio que responde con la siguiente estructura:

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
       <s:Body>
          <getBillResponse xmlns="http://biller.com/onlinebilling">
             <BillResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <Message>Factura No Existe</Message>
                <RequestId>8450</RequestId>
                <Status>82</Status>
             </BillResponse>
          </getBillResponse>
       </s:Body>
    </s:Envelope>

    Se requiere que la estructura sea la siguiente pues el cliente tiene un sistema antiguo y debe adaptarse a la estructura de una manera muy estricta

    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
       <s:Body>
          <ns2:getBillResponse xmlns="http://biller.com/onlinebilling">
             <BillResponse>
                <Message>Factura No Existe</Message>
                <RequestId>8450</RequestId>
                <Status>82</Status>
             </BillResponse>
          </ns2:getBillResponse>
       </s:Body>
    </s:Envelope>

    La diferencia es que se requiere añadir un prefijo ns2 en la etiqueta getBillResponse y si también no debe estar el objeto  xmlns="http://biller.com/onlinebilling" en la etiqueta getBillResponse.

    Realmente no he logrado realizar esta configuración, adjunto el codigo que estoy usando:

    Public Class prueba
        Implements Iprueba

        Public Function getBill(ByVal BillRequest As _BillRequest) As _BillResponse Implements Iprueba.getBill

            Dim objResponse As New _BillResponse
            objResponse.Message = "Factura No Existe"
            objResponse.RequestId = "8450"
            objResponse.Status = "82"

            Return objResponse

        End Function

    End Class

    Imports System.ServiceModel
    Imports System.Runtime.Serialization
    Imports System.Xml.Serialization
    Imports System.Web.Services
    Imports System.Web.Services.Protocols

    <ServiceContract(Namespace:="http://biller.com/onlinebilling")>
    Public Interface Iprueba

        <OperationContract(Name:="getBill")>
        Function getBill(<MessageParameter(Name:="BillRequest")> ByVal BillRequest As _BillRequest) As <MessageParameter(Name:="BillResponse")> _BillResponse

    End Interface

    <DataContract(Namespace:="http://biller.com/onlinebilling")>
    Public Class _BillResponse

        <DataMember>
        Property Status As String

        <DataMember>
        Property RequestId As String

        <DataMember>
        Property Message As String

    End Class

    <DataContract(Namespace:="http://biller.com/onlinebilling")>
    Public Class _BillRequest

        <DataMember>
        Property RequestId As String

        <DataMember>
        Property SearchType As String

        <DataMember>
        Property InvoiceId As String

        <DataMember>
        Property AgreementId As String

        <DataMember>
        Property CurrentDatetime As String

        <DataMember>
        Property InqDate As String

        <DataMember>
        Property InqPeriod As String

    End Class

    Agradezco  su ayuda.

     




    • Editado AndrewHerz miércoles, 11 de abril de 2018 19:45 error en una clase
    miércoles, 11 de abril de 2018 19:25