none
Error en deserialización RRS feed

  • Pregunta

  • Hola, tengo un error al momento de recibir la respuesta de un servicio web:

    Error in deserializing body of reply message for operation 'GetVisitOrderByIdEBF'. There is an error in XML document (2, 9836). Input string was not in a correct format.

    He leido de aumentar "readerQuotas", o conflictos con el tipo de parametro que devuelve el servicio. Con respecto al "readerQuotas" en mi web.config tengo:

    <binding name="ServiceOrderServiceSOAP" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647">
              <readerQuotas maxDepth ="2147483647" maxArrayLength ="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
              <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>

    No se si es algun valor que devuelve el servicio y que al momento de asignarlo causa el conflicto ya que la respuesta del servicio es algo grande, es decir muchos valores y no estoy seguro como podría saber que valor me da el error.

    Si me pudiera orientar?

    Saludos.

    Nota: He probado el servicio desde SOAP UI y me retorna la respuesta correctamente.


    David Robinson


    • Editado draw507 miércoles, 26 de agosto de 2015 20:54
    miércoles, 26 de agosto de 2015 20:36

Respuestas

  • hola

    >>tengo un error al momento de recibir la respuesta de un servicio web

    pero si tomas la respuesta del servicio web y la logueas a un archivo para poder analizarla, puedes observar que es correcto el xml ?

    como estas invocando el servicio web ? digo creas un service reference y lo invocas mediente el proxy que se genera

    >>He leido de aumentar "readerQuotas", o conflictos con el tipo de parametro que devuelve el servicio.

    pero tanta cantidad de informacion retorna como respuesta el servicio ?

    el analisis que realizas desde el soap ui, tanto es la informacion como para tener que aumentar la cuota de transferencia

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta draw507 jueves, 27 de agosto de 2015 19:34
    jueves, 27 de agosto de 2015 0:11

Todas las respuestas

  • hola

    >>tengo un error al momento de recibir la respuesta de un servicio web

    pero si tomas la respuesta del servicio web y la logueas a un archivo para poder analizarla, puedes observar que es correcto el xml ?

    como estas invocando el servicio web ? digo creas un service reference y lo invocas mediente el proxy que se genera

    >>He leido de aumentar "readerQuotas", o conflictos con el tipo de parametro que devuelve el servicio.

    pero tanta cantidad de informacion retorna como respuesta el servicio ?

    el analisis que realizas desde el soap ui, tanto es la informacion como para tener que aumentar la cuota de transferencia

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta draw507 jueves, 27 de agosto de 2015 19:34
    jueves, 27 de agosto de 2015 0:11
  • - como estas invocando el servicio web ? digo creas un service reference y lo invocas mediente el proxy que se genera

    Primero agregue la referencia del servicio al proyecto, luego en el metodo donde invoco al servicio tengo:

    OrderServices.ServiceOrderServiceClient serviceOrder = new OrderServices.ServiceOrderServiceClient();
    
                serviceOrder.ClientCredentials.UserName.UserName = "user#";
                serviceOrder.ClientCredentials.UserName.Password = "12345678";
    
    OrderServices.HeaderResponse response = new OrderServices.HeaderResponse();
                OrderServices.MovementService[] movementService;
                OrderServices.RequesterStatement[] requester;
                OrderServices.VesselDetail vesselDetail = new OrderServices.VesselDetail();
                OrderServices.TransactionDetail transactionDetail = new OrderServices.TransactionDetail();
                OrderServices.VisitOrder[] visitOrder;
                bool haveServiceDelivery;
                string serviceOrderNo = "MVIS-2015-00252";
    
    response = serviceOrder.GetVisitOrderByIdEBF(request, serviceOrderNo, out movementService, out requester, out vesselDetail,
                                                   out transactionDetail, out visitOrder, out haveServiceDelivery);

    A este metodo GetVisitOrderByIdEBF solo le envio informacion en los parametros request (que seria mi header el servicio) y en el parametro serviceOrderNo. Y es en este punto donde salta error de deserealizacion.

    El primer problema que tuve fue el tamaño del mensaje, por eso aumente el tamaño en el web.config, aunque no puedo asegurar que necesite tanto como especifique:

    <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="ServiceOrderServiceSOAP" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647">
              <readerQuotas maxDepth ="2147483647" maxArrayLength ="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
              <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Basic" proxyCredentialType="None" realm="" />
                <message clientCredentialType="UserName" algorithmSuite="Default" />
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint address="http://10.1.92.11:18456/ServiceOrderServiceV1.0"
              binding="basicHttpBinding" bindingConfiguration="ServiceOrderServiceSOAP"
              contract="OrderServices.ServiceOrderService" name="ServiceOrderServiceSOAP" />
        </client>
      </system.serviceModel>
    Como menciono con el Soap UI obtengo la respuesta. Trate te colocar la respuesta aqui pero no puedo colocar mas de 60000 caracteres y mi respuesta que obtengo es de 90000 caracteres y puede ser mas :S. Como  comento es un poco extensa la respuesta que me envia el servicio y no se si existiera alguna manera de saber que me esta fallando


    David Robinson




    • Editado draw507 jueves, 27 de agosto de 2015 12:52
    jueves, 27 de agosto de 2015 12:44
  • hola

    porque un servicio web tiene parametros como "out" ?

    se supone queun webmethod deberia retornar la informacion en el response, podrias crear una clase con varias propiedades cuyo tipo sean otras clases, peor no deberia tener parametros por referencia

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    jueves, 27 de agosto de 2015 13:44
  • Bueno no podria responder eso, ya que solo consumo el servicio y es lo que me pide el metodo. 

    Tambien le aplique a la referencia "Always generate message contracts". Y con esto invocaba al metodo del servicio de esta manera:

    OrderServices.ServiceOrderServiceClient serviceOrder = new OrderServices.ServiceOrderServiceClient();
    
                serviceOrder.ClientCredentials.UserName.UserName = "user#";
                serviceOrder.ClientCredentials.UserName.Password = "12345678";
    
    OrderServices.HeaderRequest request = new OrderServices.HeaderRequest()
                {
                    transactionId = string.Empty,
                    transactionDate = DateTime.Today,
                    userId = "CLERK",
                    userCompany = "l01",
                    userGroup = "INTERNAL",
                    userRoles = "QUERY_ONLY",
                    sourceIPAddress = "0.0.0.0",
                    sourceApplication = "SERVICE-PORTAL",
                    channel = "WEB",
                    languageCode = "EN",
                    serviceName = "ServiceOrderService",
                    serviceOperation = "getVisitOrderByIdEBF",
                    operationType = "GET",
                    bizTransactionId = 0,
                    orchestrationStep = string.Empty,
                    pageSize = 6,
                    pageNumber = 1,
                    sortIndex = 0,
                    sortType = string.Empty,
                    compensationIndicator = false,
                    userName = string.Empty,
                    userEmail = string.Empty
                };
    string serviceOrderNo = "MVIS-2015-00252";
    
    OrderServices.GetVisitOrderByIdEBFRequest vor = new OrderServices.GetVisitOrderByIdEBFRequest(request, serviceOrderNo);
                    
                    OrderServices.GetVisitOrderByIdEBFResponse res = serviceOrder.GetVisitOrderByIdEBF(vor);
    Y de igual manera me envia el mismo error.


    David Robinson


    • Editado draw507 jueves, 27 de agosto de 2015 13:55
    jueves, 27 de agosto de 2015 13:54