Estoy creando una aplicación cliente-servidor WCF. Sin embargo, en mi primera prueba, una simple llamada (el método básicamente sólo return true;
) toma mucho tiempo (~ 5 segundos)Las llamadas WCF simples toman mucho tiempo
Me trataron de rastrear, y aquí está una captura de pantalla del rastreo de llamadas
Como puede ver entre la línea 2 y 3 hay un lapso de 5 segundos (aunque para ser sincero no sé qué significan las líneas 2 y 3)
En la configuración del cliente (llamante), el enlace es así (principalmente generado por Visual Studio
<wsHttpBinding>
<binding name="WSHttpBinding_IAgent" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text"
textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None">
</security>
</binding>
</wsHttpBinding>
y en el servidor
<wsHttpBinding>
<binding name="WSHttpBinding_IAgent" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:05:00" sendTimeout="00:05:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="16777216" maxReceivedMessageSize="16777216"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="16777216"
maxArrayLength="16384" maxBytesPerRead="16384" maxNameTableCharCount="16384" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="None"/>
</binding>
Y la manera en que yo lo llamo algo como esto
var client = new AgentClient(binding, BuildEndpointAddress(hostName, port));
for(int i =0; i<10; i++)
client.IsAlive(); //this call is very slow despite just returning true;
// subsequent calls are also slow so probably not because of wake-up time
Nota para esta prueba, el servidor y el cliente están en el mismo equipo por lo que no podría ser un problema de red. ¿Alguna idea de lo que está causando la lentitud o cómo puedo encontrar más información para solucionar esto?
¿Es más rápido en llamadas posteriores? Podría estar compilando o "despertando" en la primera llamada. – McGarnagle
no Intenté repetir el cliente de llamada.IsAlive() varias veces, y las llamadas posteriores no muestran ninguna diferencia con respecto al primero. –
@dbaseman Para ser precisos, la duración varía, pero parece ser más aleatoria que sistemática. Por ejemplo, en mi primera prueba, la duración de las llamadas consecutivas (mismo método) fue 4 segundos, 4, 6, 2, 4, 3, 8, y cuando reintenté fue: 9, 3, 2, 4, 5, 5, 3 –