HttpWebRequest работает в медленно первый раз в SQLCLR

Вы попробовали __name__ атрибут класса? т.е. type(x).__name__ даст Вам название класса, который я думаю, то, что Вы хотите.

>>> import itertools
>>> x = itertools.count(0)
>>> type(x).__name__
'count'

Этот метод работает с модернизированные классы только. Ваш код мог бы использовать некоторые классы старого стиля. Следующие работы для обоих:

x.__class__.__name__

5
задан Rob 18 August 2009 в 08:47
поделиться

6 ответов

Сначала я столкнулся с проблемой, когда использовал HttpWebRequest . Это связано с тем, что класс ищет прокси для использования. Если вы установите для объекта Proxy значение null / Nothing , он сразу же заархивируется.

10
ответ дан 18 December 2019 в 11:59
поделиться

При первой загрузке SQLCLR необходимых сборок всегда есть задержка. Так должно быть не только для вашей функции MakeWebRequest, но и для любой функции .NET в SQLCLR.

0
ответ дан 18 December 2019 в 11:59
поделиться

Не уверен, но если задержка достаточно велика, чтобы первоначальный поиск DNS мог быть причиной? (как долго задержка является нормальным вызовом?)

и / или

Является ли этот URI внутренним для Сети / или другой внутренней сети?

Я видел некоторые странные задержки в сети из-за использования профилей балансировки нагрузки внутри сети, которая неправильно настроена, межсетевые экраны, балансировщики нагрузки и другие сетевые профили могут «бороться» с начальными соединениями ...

Я не очень хорошо разбираюсь в сетевых технологиях, но вы, возможно, захотите узнать, что SA может сказать об этом на serverfault.com ...

удачи

1
ответ дан 18 December 2019 в 11:59
поделиться

HttpWebRequest является частью сборки System.Net, которая не является частью поддерживаемых библиотек . Я бы рекомендовал использовать библиотеку System.Web.Services вместо того, чтобы выполнять вызовы веб-служб изнутри SQLCLR.

0
ответ дан 18 December 2019 в 11:59
поделиться

Я тестировал, и мой первый холодный запуск (после перезапуска службы 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);
        }
    }
}
0
ответ дан 18 December 2019 в 11:59
поделиться

Мне кажется, это проверка подписи кода. Все системные DLL, поставляемые MS, подписаны, и SQL проверяет подписи во время загрузки. Очевидно, срок действия списка отозванных сертификатов истек, и механизм проверки сертификатов истекает при получении нового списка. Я писал об этой проблеме до . Устраните медленный запуск приложения из-за проверки знака кода , и проблема также описана в этой статье Technet: Отзыв сертификата и проверка статуса .

Решение довольно загадочна и включает в себя редактирование ключа в реестре: HKLM \ SOFTWARE \ Microsoft \ Cryptography \ OID \ EncodingType 0 \ CertDllCreateCertificateChainEngine \ Config :

  • ChainUrlRetrievalTimeoutMillise27conds. Если 0 или нет, используется значение по умолчанию 15 секунд. Измените этот тайм-аут на разумное значение, например 200 миллисекунд.
  • ChainRevAccumulativeUrlRetrievalTimeoutMilliseconds Это тайм-аут получения совокупного CRL. Если установлено значение 0 или отсутствует, используется значение по умолчанию 20 секунд. Измените время ожидания на значение, например 500 миллисекунд.

Существует также более конкретное решение для сборок, подписанных Microsoft (это из документации Biztalk, но применимо к любой загрузке сборки):

Загрузить сертификат Microsoft вручную Измените время ожидания на значение, например 500 миллисекунд.

Существует также более конкретное решение для сборок, подписанных Microsoft (это из документации Biztalk, но применимо к любой загрузке сборки):

Загрузить сертификат Microsoft вручную Измените время ожидания на значение, например 500 миллисекунд.

Существует также более конкретное решение для сборок, подписанных Microsoft (это из документации Biztalk, но применимо к любой загрузке сборки):

Загрузить сертификат Microsoft вручную Списки отзыва

При запуске приложения .NET .NET Framework попытается скачать отзыв сертификата список (CRL) для любой подписанной сборки. Если в вашей системе нет прямого доступ в Интернет, или есть ограничен доступ к Домен Microsoft.com, это может задержать запуск BizTalk Server. Избегать эта задержка при запуске приложения, вы можно использовать следующие шаги, чтобы вручную скачать и установить код подписание списков отзыва сертификатов в вашей системе.

  1. Загрузите последние обновления CRL с http://crl.microsoft.com/pki/crl/products/CodeSignPCA.crl а также http://crl.microsoft.com/pki/crl/products/CodeSignPCA2.crl .
  2. Переместите файлы CodeSignPCA.crl и CodeSignPCA2.crl в изолированные system.
  3. В командной строке введите следующую команду, чтобы использовать certutil утилита для обновления локального хранилище сертификатов с CRL загружено на шаге 1: certutil –addstore CA c: \ CodeSignPCA.crl

Файлы CRL регулярно обновляются, поэтому вам следует подумать о настройке повторяющаяся задача загрузки и установка обновлений CRL. Смотреть при следующем обновлении дважды щелкните значок .crl и просмотрите значение Поле «Следующее обновление».

4
ответ дан 18 December 2019 в 11:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: