Quando si effettua una richiesta HttpWeb all'interno di una stored procedure CLR (come indicato nel seguente codice), la prima chiamata dopo il server Sql viene (ri) avviata o dopo un determinato (ma indeterminato) periodo di il tempo attende per un certo periodo di tempo sulla chiamata al metodo GetResponse().HttpWebRequest viene eseguito lentamente la prima volta all'interno di SQLCLR
C'è un modo per risolvere questo problema che non implica un "hack" come avere un lavoro di SQL Server Agent eseguito ogni pochi minuti per provare e assicurare che la prima chiamata "lenta" sia fatta dall'agente e non codice di produzione "reale"?
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;
}
(gestione degli errori e altro codice non critico ben rimosso per brevità)
Vedi anche this Sql Server forums thread.
Quanto dura questa prima chiamata tempo di attesa rispetto al 2 ° + orario di chiamata? Di solito è questa chiamata allo stesso URI? – BigBlondeViking
Credo (in cima alla mia testa) '30 secondi, e la chiamata è fatta per un URL che è un indirizzo IP, quindi non credo che il DNS sarebbe un problema :( – Rob
Hai pensato di guardare il Traffico HTTP con qualcosa come WireShark? O è stato escluso tutto sul filo. –