Wenn Sie eine HttpWebRequest innerhalb einer gespeicherten CLR-Prozedur (gemäß dem folgenden Code), der erste Aufruf nach dem Sql Server ist (neu) gestartet oder nach einem bestimmten (aber unbestimmten) Zeitraum von Die Zeit wartet beim GetResponse() -Methodenaufruf ziemlich lange.HttpWebRequest läuft langsam zuerst innerhalb SQLCLR
Gibt es eine Möglichkeit, dies zu beheben, die nicht einen "Hack" wie einen Sql Server Agent Job alle paar Minuten ausgeführt wird, um sicherzustellen, dass der erste "langsame" Anruf vom Agenten und nicht gemacht wird "echter" Produktionscode?
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;
}
(Fehlerbehandlung und anderen nicht-kritischen Code hat ben der Kürze entfernt)
Siehe auch this Sql Server forums thread.
Wie lange ist dieser erste Anruf Wartezeit gegen 2. + Anruf mal? Ist dieser Aufruf an dieselbe URI normalerweise? – BigBlondeViking
Ich glaube (von Kopf bis Kopf) ist es 30 Sekunden, und der Anruf wird an eine URL, die eine IP-Adresse ist gemacht, so glaube ich nicht, dass DNS ein Problem wäre :( – Rob
Haben Sie darüber nachgedacht, die HTTP-Verkehr mit etwas wie WireShark? Oder ist alles auf dem Draht ausgeschlossen worden? –