Podczas tworzenia HttpWebRequest w ramach procedury składowanej CLR (zgodnie z kodem poniżej), pierwsze wywołanie po Sql Server jest (ponownie) rozpoczęte lub po danym (ale nieokreślonym) okresie czas oczekiwania na dość długi czas na wywołanie metody GetResponse().HttpWebRequest działa wolno po raz pierwszy w SQLCLR
Czy istnieje sposób rozwiązania tego problemu, który nie wiąże się z "włamaniem", takim jak uruchamianie zadania agenta serwera Sql co kilka minut, aby upewnić się, że pierwsze "wolne" wywołanie zostało wykonane przez agenta, a nie "prawdziwy" kod produkcyjny?
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;
}
(obsługa błędów i drugi kod niekrytycznym jest usuwane Ben dla uproszczenia)
Patrz również this Sql Server forums thread.
Jak długi jest czas oczekiwania na połączenie w pierwszej rozmowie z 2-krotnym czasem połączenia? Czy to połączenie z tym samym identyfikatorem URI jest zwykle? – BigBlondeViking
Wierzę (z mojej góry), że "30 sekund, a połączenie jest wykonane na adres URL, który jest adresem IP, więc nie sądzę, że DNS byłby problem :( – Rob
Czy uważasz, patrząc na Ruch HTTP z czymś takim jak WireShark? Lub wszystko z przewodu zostało wykluczone –