Antecedentes¿Cómo aumentar el tamaño POST para un servicio web ASMX?
Estoy desarrollando un control del lado del servidor ASP.Net que necesita hablar con un servicio web ASMX. El control del lado del servidor usa un objeto WebClient
para hablar con el servicio web, ya que necesita ser reutilizado a menudo en varias aplicaciones, y para facilitarlo a los desarrolladores, no es necesario que creen una referencia de servicio para el servicio web.
Implementación
Durante el uso del control, se requiere el envío de un objeto serializado al servicio web. El objeto se serializa usando el XmlSerializer
y la cadena XML resultante se comprime utilizando la biblioteca de compresión chilkat. La llamada de servicio web para el control se ve de la siguiente manera:
webClient.UploadStringAsync(new Uri(serviceHost + serviceMethod), "POST", sendData)
El contenido de sendData (string
) es compressedResponse={CompressedData}
.
El servicio web tiene un método definido de la siguiente manera para recibir los datos y luego descomprimir el valor de cadena utilizando la biblioteca chilkat antes de deserializar el objeto usando el XmlSerializer
.
public void SaveResponse(string compressedResponse)
La comunicación entre el control y el servicio está funcionando. Inicialmente no se definieron ni se definieron vinculaciones en el web.config
para ninguno de los anteriores. Después de búsqueda inicial Yo añado
<httpRuntime maxRequestLength="20480"/>
tanto para el cliente y servidor web.config
archivos. Esto no ha hecho ninguna diferencia.
Problema
comprimido o sin comprimir los datos sean publicados en el servicio web en la variable sendData
es demasiado grande para una solicitud POST normal, y se corrompe. Esto se confirma al verificar los últimos caracteres de la cadena antes y después de ser publicados en el servidor en formato comprimido, y sin comprimir, al documento Xml le falta la última etiqueta raíz al registrar el depurador. El string
no se puede descomprimir y, por lo tanto, la llamada de servicio falla siempre.
¿Cómo puedo aumentar el tamaño POST para la solicitud WebClient
para asegurarme de que el servidor reciba la cadena completa?
He revisado las diversas opciones en Google, pero ninguna me proporciona una muestra suficientemente buena de dónde realizar los cambios ni ejemplos de cómo deben verse los cambios. Estoy completamente perdido en cuanto a si el cambio debe realizarse en el servidor o en el sitio web consumidor, y dado que no hay un enlace definido para esto, cómo crear un enlace en el web.config
para una llamada de servicio HTTP ASMX.
¿Qué te hace pensar que la cuerda es demasiado larga? ¿Solo el hecho de que no se puede descomprimir? ¿Cómo se ve en Fiddler? –
@John Actualicé la pregunta con la información. Hacer un control básico de la cadena comprimida copiando los últimos caracteres antes de la publicación y validarla contra la cadena publicada. Además, el envío del documento Xml sin comprimir muestra que falta la etiqueta raíz final y se corta a mitad de camino al registrar el depurador. – BinaryMisfit