В настоящее время мы пытаемся реализовать SQL Server 2008 UDF для расширения сокращенных URL-адресов. У нас это работает довольно хорошо против большинства основных сервисов сокращения URL. Тем не менее, в случайное время он «зависнет» и откажется работать с определенным доменом (например, bit.ly), а последующие вызовы других служб (например, tinyurl.com) продолжат выполняться.
Сначала мы думали, что это связано с какой-то блокировкой поставщиком сокращения URL, но остановка и перезапуск службы dbserver приводят к успешному выполнению последующих запросов. Может ли быть так, что SQL-сервер каким-то образом объединяет исходящие http-соединения?
Вот код ...
using System;
using System.Data;
using System.Net;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString UrlExpander(string url)
{
// Set up the Webrequest
HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create(url);
try
{
// Set autoredirect off so the redirected URL will not be loaded
wr.AllowAutoRedirect = false;
// Get the response
HttpWebResponse wresp = (HttpWebResponse)wr.GetResponse();
return new SqlString(wresp.Headers["Location"].ToString());
}
catch (Exception ex)
{
wr.Abort();
throw ex;
}
}
};