¿Por qué llamar a un servicio web es más lento desde una página web?

Tenemos una DLL utilizada como la capa intermedia entre el front end de nuestro sitio web y nuestro sistema de ticketing de back-end. El método de inserción en el sistema de emisión de boletos es un poco complicado de explicar, pero la versión corta es que es lento. El mejor escenario que he obtenido es un tiempo de envío de 9 segundos.

El verdadero problema, sin embargo, es que solo puedo obtener ese tiempo a través de una aplicación de Windows, no a través de un sitio web de ASP.NET. He configurado tanto una aplicación de prueba de Windows como una página web para realizar pruebas, y aunque el código se copia entre ellos, la página web se envía constantemente en 17-20 segundos, mientras que la aplicación de Windows obtiene de 8 a 11 segundos.

¿Qué podría estar causando eso?

EDITAR: En respuesta a un par de respuestas ...

La llamada al servicio web toma la mayor parte del tiempo, pero no tengo control sobre este servicio web ya que es proporcionado por el proveedor del sistema de tickets. Necesito averiguar por qué el servicio web está tomando diferentes cantidades de tiempo cuando se lo llama desde otro tipo de aplicación. El código es exactamente el mismo en ambos casos, y está ejecutando un ciclo y luego informa los tiempos registrados.

El código es:

for (int i = 0; i < numIterations; i++)
        {
            startTimes[i] = DateTime.Now;

            try
            {
                cvNum = Clearview.Submit(req, DateTime.Now, DateTime.Now, false);
            }
            catch (Exception ex)
            {
                exceptionCount++;
                lblResult.Text += @"
Exception Caught: " + ex.Message + @"
"; } endTimes[i] = DateTime.Now; }

Es el mismo ciclo en ambos casos, y estoy marcando el tiempo justo antes y después de la llamada a la biblioteca, que procesa más y luego llama al servicio web. Pero ese procesamiento debería ser consistente ¿no? He rastreado durante la depuración y no he visto ningún retraso en la llamada al servicio web real ...

EDITAR de nuevo: trabajando con Ants, en ambos casos el 99.4% del tiempo se envía solo en la llamada de servicio web. Parece que no hay diferencia allí ... excepto que, cuando se agota el tiempo de espera, la página web tarda más que la aplicación de Windows.

1
No estoy seguro de lo que quieres decir...?
agregado el autor CodeRedick, fuente
Prueba entre dos backends de servicios web diferentes: Reference.CS generado en un caso y WebClient en otro. La referencia se genera dentro de un .DLL utilizado tanto por la aplicación de Windows como por la página web.
agregado el autor CodeRedick, fuente
¿Qué clientes de Windows y web estás utilizando para los servicios web?
agregado el autor Mark Cidade, fuente
¿Está utilizando HttpWebRequest, un Reference.cs generado, un cliente web JavaScript del lado del cliente, o qué?
agregado el autor Mark Cidade, fuente

3 Respuestas

Potencialmente, la ubicación del servicio web en relación con el servidor web podría estar teniendo un problema. Además, la estructura de la página y otros procesos dentro de la interfaz de usuario web pueden tener un impacto en el tiempo que tarda la aplicación en procesarse.

Como mencionamos los elementos de registro en ambos lados es una gran idea, si eso no le proporciona lo que necesita, puede probar un perfilador de rendimiento como Ants Profiler de Red Gate que puede ayudar a identificar la línea, el método o la clase que está utilizando la mayor parte del tiempo.

2
agregado
En este caso, miraría Ants Profiler, miro los tiempos de ejecución del ciclo. Además, ¿se lanzan excepciones más en un caso que en otro? Las excepciones son costosas.
agregado el autor Mitchel Sellers, fuente
Ok, mira si las hormigas entre las dos aplicaciones pueden aislar una línea específica que requiere más esfuerzo.
agregado el autor Mitchel Sellers, fuente
Acabo de agregar editado en más información. No tengo acceso a las partes internas del servicio web, pero no estoy seguro de por qué eso importaría de todos modos ...
agregado el autor CodeRedick, fuente
Además, dado que estoy probando en mi escritorio, el servicio web está en el mismo lugar para ambos clientes ...
agregado el autor CodeRedick, fuente
Jugando con hormigas ahora, pero no se lanzan excepciones.
agregado el autor CodeRedick, fuente
Es la llamada al servicio web, como sospeché. El 99% del tiempo es solo en esa llamada ...
agregado el autor CodeRedick, fuente

Pimienta su aplicación en ambos lados con registros, eso le mostrará a dónde va el tiempo. Si eso no ayuda, use Wireshark para rastrear la actividad de la red.

1
agregado

¿Estás ejecutando ambos en la misma máquina? ¿La capa intermedia que está llamando está ubicada en una máquina remota? Las duraciones de tiempo que mencionas vagamente se sienten como un problema de tiempo de espera de DNS, al abrir una conexión se incurre en la penalización de la primera respuesta de DNS (hacia abajo/mal dirigida) al tiempo de espera. ¿Estás seguro de que cualquiera que sea el archivo de configuración/var que señala la DLL a la capa intermedia es el mismo en ambas invocaciones?

Apoyo la sugerencia de usar Wireshark para ver qué está sucediendo. Al menos puede asegurarse de que el tiempo de procesamiento del back-end es (debería ser, de todos modos) el mismo ...

1
agregado
Era un problema de configuración, uno se enviaba al sistema de producción, aunque ambos usaban el servicio web correcto. La diferencia de tiempo se debió a la mayor actividad de la base de datos de prod es aparentemente. Honestamente, no estoy seguro de por qué funcionó en absoluto ... ¡Gracias, sin embargo!
agregado el autor CodeRedick, fuente