Вы попробовали __name__
атрибут класса? т.е. type(x).__name__
даст Вам название класса, который я думаю, то, что Вы хотите.
>>> import itertools
>>> x = itertools.count(0)
>>> type(x).__name__
'count'
Этот метод работает с модернизированные классы только. Ваш код мог бы использовать некоторые классы старого стиля. Следующие работы для обоих:
x.__class__.__name__
Сначала я столкнулся с проблемой, когда использовал HttpWebRequest
. Это связано с тем, что класс ищет прокси для использования. Если вы установите для объекта Proxy
значение null
/ Nothing
, он сразу же заархивируется.
При первой загрузке SQLCLR необходимых сборок всегда есть задержка. Так должно быть не только для вашей функции MakeWebRequest, но и для любой функции .NET в SQLCLR.
Не уверен, но если задержка достаточно велика, чтобы первоначальный поиск DNS мог быть причиной? (как долго задержка является нормальным вызовом?)
и / или
Является ли этот URI внутренним для Сети / или другой внутренней сети?
Я видел некоторые странные задержки в сети из-за использования профилей балансировки нагрузки внутри сети, которая неправильно настроена, межсетевые экраны, балансировщики нагрузки и другие сетевые профили могут «бороться» с начальными соединениями ...
Я не очень хорошо разбираюсь в сетевых технологиях, но вы, возможно, захотите узнать, что SA может сказать об этом на serverfault.com ...
удачи
HttpWebRequest является частью сборки System.Net, которая не является частью поддерживаемых библиотек . Я бы рекомендовал использовать библиотеку System.Web.Services вместо того, чтобы выполнять вызовы веб-служб изнутри SQLCLR.
Я тестировал, и мой первый холодный запуск (после перезапуска службы SQL) был через 3 секунды (а не через 30, как у вас), все остальные - за 0 секунд.
Пример кода I ' мы использовали для создания библиотеки DLL:
using System;
using System.Data;
using System.Net;
using System.IO;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
namespace MySQLCLR
{
public static class WebRequests
{
public static void MakeWebRequest(string address, string parameters, int connectTO)
{
string 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))
{
returnData = reader.ReadToEnd();
reader.Close();
}
responseStream.Close();
}
response.Close();
}
SqlDataRecord rec = new SqlDataRecord(new SqlMetaData[] { new SqlMetaData("response", SqlDbType.NVarChar, 10000000) });
rec.SetValue(0, returnData);
SqlContext.Pipe.Send(rec);
}
}
}
Мне кажется, это проверка подписи кода. Все системные DLL, поставляемые MS, подписаны, и SQL проверяет подписи во время загрузки. Очевидно, срок действия списка отозванных сертификатов истек, и механизм проверки сертификатов истекает при получении нового списка. Я писал об этой проблеме до . Устраните медленный запуск приложения из-за проверки знака кода , и проблема также описана в этой статье Technet: Отзыв сертификата и проверка статуса .
Решение довольно загадочна и включает в себя редактирование ключа в реестре: HKLM \ SOFTWARE \ Microsoft \ Cryptography \ OID \ EncodingType 0 \ CertDllCreateCertificateChainEngine \ Config
:
Существует также более конкретное решение для сборок, подписанных Microsoft (это из документации Biztalk, но применимо к любой загрузке сборки):
Загрузить сертификат Microsoft вручную Измените время ожидания на значение, например 500 миллисекунд.
Существует также более конкретное решение для сборок, подписанных Microsoft (это из документации Biztalk, но применимо к любой загрузке сборки):
Загрузить сертификат Microsoft вручную Измените время ожидания на значение, например 500 миллисекунд.
Существует также более конкретное решение для сборок, подписанных Microsoft (это из документации Biztalk, но применимо к любой загрузке сборки):
Загрузить сертификат Microsoft вручную Списки отзыва
При запуске приложения .NET .NET Framework попытается скачать отзыв сертификата список (CRL) для любой подписанной сборки. Если в вашей системе нет прямого доступ в Интернет, или есть ограничен доступ к Домен Microsoft.com, это может задержать запуск BizTalk Server. Избегать эта задержка при запуске приложения, вы можно использовать следующие шаги, чтобы вручную скачать и установить код подписание списков отзыва сертификатов в вашей системе.
- Загрузите последние обновления CRL с http://crl.microsoft.com/pki/crl/products/CodeSignPCA.crl а также http://crl.microsoft.com/pki/crl/products/CodeSignPCA2.crl .
- Переместите файлы CodeSignPCA.crl и CodeSignPCA2.crl в изолированные system.
- В командной строке введите следующую команду, чтобы использовать certutil утилита для обновления локального хранилище сертификатов с CRL загружено на шаге 1: certutil –addstore CA c: \ CodeSignPCA.crl
Файлы CRL регулярно обновляются, поэтому вам следует подумать о настройке повторяющаяся задача загрузки и установка обновлений CRL. Смотреть при следующем обновлении дважды щелкните значок .crl и просмотрите значение Поле «Следующее обновление».