Al realizar una HttpWebRequest dentro de un procedimiento almacenado CLR (según el código siguiente), la primera invocación después del servidor Sql se reinicia o después de un período determinado (pero indeterminado) de el tiempo de espera durante bastante tiempo en la llamada al método GetResponse().HttpWebRequest se ejecuta lentamente por primera vez dentro de SQLCLR
¿Hay alguna manera de resolver esto que no involucre un "hackeo" como tener un trabajo del Agente de servidor Sql ejecutándose cada pocos minutos para intentar que la primera llamada "lenta" sea realizada por el agente y no código de producción "real"?
function SqlString MakeWebRequest(string address, string parameters, int connectTO)
{
SqlString returnData;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(String.Concat(address.ToString(), "?", parameters.ToString()));
request.Timeout = (int)connectTO;
request.Method = "GET";
using (WebResponse response = request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(responseStream))
{
SqlString responseFromServer = reader.ReadToEnd();
returnData = responseFromServer;
}
}
}
response.Close();
return returnData;
}
(manejo de errores y otro código no crítico tiene ben eliminado por razones de brevedad)
Consulte también this Sql Server forums thread.
¿Cuánto tiempo dura el tiempo de espera de la primera llamada frente al segundo + tiempo de llamadas? ¿Es esta llamada a la misma URI por lo general? – BigBlondeViking
Creo (fuera de mi cabeza) es '30 segundos, y la llamada se realiza a una URL que es una dirección IP, por lo que no creo que el DNS sea un problema :( – Rob
¿Consideró mirar el Tráfico HTTP con algo así como WireShark o se ha descartado todo en el cable. –