При создании HttpWebRequest в хранимой процедуре CLR (согласно приведенному ниже коду) первый вызов после того, как сервер Sql (повторно) запущен или после заданного (но неопределенного) периода время ожидания на вызов метода GetResponse() длится довольно долго.HttpWebRequest запускается медленно в первый раз в SQLCLR
Есть ли способ разрешить это, не связанное с «взломом», например, когда задание агента сервера Sql выполняется каждые несколько минут, чтобы убедиться, что первый «медленный» вызов выполняется Агентом, а не «реальный» производственный код?
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;
}
(Обработка ошибок и другие некритические код имеет бен удалены для краткости)
Смотрите также this Sql Server forums thread.
Как долго длится это первое время ожидания вызова по сравнению с вторым + временем разговора? Является ли этот вызов тем же самым URI? – BigBlondeViking
Я верю (с моей головы) это 30 секунд, и вызов сделан по URL-адресу, который является IP-адресом, поэтому я не думаю, что DNS будет проблемой :( – Rob
Вы считаете, HTTP-трафик с чем-то вроде WireShark? Или было исключено, что все на проводке было исключено. –