Основное соединение было закрыто: при получении произошла непредвиденная ошибка - PullRequest
1 голос
/ 21 июня 2011

Использование консольного приложения, которое выполняется в Azure как запланированное задание, для всех длинных (ish) веб-страниц в Azure.

Проблема через несколько минут: базовое соединение было закрыто: на приеме произошла непредвиденная ошибка

 //// used as WebClient doesn't support timeout
public class ExtendedWebClient : WebClient
{
    public int Timeout { get; set; }

    protected override WebRequest GetWebRequest(Uri address)
    {
        HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address);
        if (request != null)
            request.Timeout = Timeout;
        request.KeepAlive = false;
        request.ProtocolVersion = HttpVersion.Version10;
        return request;
    }

    public ExtendedWebClient()
    {
        Timeout = 1000000; // in ms.. the standard is 100,000
    }
}

class Program
{
    static void Main(string[] args)
    {
        var taskUrl = "http://www.secret.com/secret.aspx";
        // create a webclient and issue an HTTP get to our url
        using (ExtendedWebClient httpRequest = new ExtendedWebClient())
        {
            var output = httpRequest.DownloadString(taskUrl);
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 21 июня 2011

Обратите внимание, что балансировщики нагрузки Windows Azure прекращают простаивающие TCP-соединения через 60 секунд. Похоже, что вы звоните через балансировщик нагрузки ... есть ли вероятность, что операция займет более 60 секунд, не отправив ничего по проводам?

1 голос
/ 21 июня 2011

В TechNet есть хорошая статья, посвященная передовым методам создания надежных соединений с SQL Azure.Основной вывод заключается в том, что вы должны встроить некоторую логику повторных попыток в случае сбоя соединения.

http://social.technet.microsoft.com/wiki/contents/articles/1541.aspx

0 голосов
/ 21 июня 2011

Запустите что-то вроде Wireshark, чтобы посмотреть соединение и выяснить, с какого конца оно закрывается. Такая странность может быть вызвана тем, что MTU между вами и вашим сервером имеет MTU ниже, чем у вас. Я думаю, что вы можете установить MTU в конфигурации WCF, не знаю, как Azure.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...