HttpWebRequest Сервер недоступен 503 проблема - PullRequest
2 голосов
/ 20 ноября 2008

Первоначально я использовал WebRequest и WebResponse для отправки сообщений Http Post. Всегда получал ответ «ОК». Сообщение, которое я публикую, представляет собой XML, подписанный сертификатом в XML.

Состав такой: C # сервис, который отправляет на сайт https. HTTPS Сайт в другом месте, что я не могу сказать. Локальный веб-сайт HTTPS, который просто получает сообщения, которые я отправляю локально, и записывает результаты в файл. Просто чтобы смоделировать то, что получает другой сайт.

Локальный веб-сайт подписан самозаверяющим сертификатом, срок действия которого истекает в 2048 году.

Этот код работал нормально до этой недели. Я всегда писал и получил ОК. На обоих сайтах. Но на этой неделе тест и реальная реализация проекта идут как капут. На обоих сайтах.
На местном сайте говорилось, что невозможно подключиться к SSL. Эта проблема вызвана самоподписанным сертификатом, который по какой-то причине выходит за рамки моего понимания. Благодаря приведенным здесь вопросам я только что подтвердил сертификат, чтобы он всегда был верным, и теперь он больше не вызывает ошибок.

Чтобы это исправить, просто напишите:

ServicePointManager.CertificatePolicy = new AcceptAllCertificatePolicy();

В начале вашего приложения. Так что он запускается только один раз.

Остается проблема: «Удаленный сервер возвратил ошибку: (503) Сервер недоступен». Я ввожу URL в свой браузер, и он отлично работает для меня. В коде этот веб-сайт ничего не получает, и когда он переходит к ответу в Интернете, он выдает мне вышеуказанную ошибку

Я сделал тестовое приложение, которое отправляет только «Тестирование 1 2 3», но я продолжаю получать сообщение об ошибке. Я также отправил его на веб-сайт Гарварда https, и там не было ошибок.

private void btnSend_Click(object sender, EventArgs e)
    {
        try
        {
            WebRequest req = WebRequest.Create(cboUrl.Text);
            req.PreAuthenticate = true;
            req.UseDefaultCredentials = true;
            req.Method = "POST";
            req.ContentType = "text/xml";
            String msg = txtMsg.Text;

            using (Stream s = req.GetRequestStream())
            {
                try
                {
                    s.Write(
                        System.Text.ASCIIEncoding.ASCII.GetBytes(msg), 0, msg.Length);
                }
                finally
                {
                    s.Close();
                }
            }

            WebResponse resp = req.GetResponse();
            StreamReader str = new StreamReader(resp.GetResponseStream());

            txtRes.Text = str.ReadToEnd();
        }
        catch (WebException ex)
        {
            txtRes.Text = ex.Message;
        }
        catch (Exception ex)
        {
            txtRes.Text = ex.Message;
        }

    }

Это еще один пример, который я построил из того, что нашел в интернете:

private void button1_Click(object sender, EventArgs e)
    {
        try
        {

            HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(cboUrl.Text);
            myReq.Headers.Clear();
            myReq.Method = "POST";
            myReq.KeepAlive = false;
            myReq.ProtocolVersion = HttpVersion.Version11;
            myReq.ContentType = "text/xml";
            myReq.Proxy = null;
            myReq.Credentials = null;
            myReq.ContentLength = txtMsg.Text.Length;
            using (StreamWriter sendingData = new StreamWriter(myReq.GetRequestStream()))
            {
                sendingData.Write(txtMsg.Text);
                sendingData.Flush();
                sendingData.Close();
            }

            HttpWebResponse myResponse = (HttpWebResponse) myReq.GetResponse();
            StreamReader responseStream = new StreamReader(myResponse.GetResponseStream());
            txtRes.Text = responseStream.ReadToEnd();

            responseStream.Close();
            myResponse.Close();

        }
        catch(WebException ex )
        {
            txtRes.Text = ex.Message;
        }
        catch (Exception ex)
        {
            txtRes.Text = ex.Message;
        }


    }

Обновление

Ошибка состояла в том, что тот, кому я звонил с httpwebrequest, нуждался в некоторых заголовках http, которые я не предоставлял. До того, как произошло единственное, я получил ответ «ОК». Они исправили свой код, а я исправил мой, и теперь он работает.

Если это случится с кем-то еще, проверьте, как указано ниже, в настройках прокси-сервера, а также проверьте, дает ли другая сторона исключение или вообще ничего не возвращает.

Ответы [ 5 ]

3 голосов
/ 20 ноября 2008

Если вы не получаете ошибку 503 при переходе по URL в вашем браузере, но делаете получаете ее при запросе ресурса при использовании HttpWebRequest, первое, что я бы порекомендовал является то, что вы указываете значение для UserAgent при выполнении запроса.

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

1 голос
/ 01 июня 2013

Если вы перезагружаете IIS, убедитесь, что вы недавно не меняли свой пароль. Глупо, но бывает.

1 голос
/ 05 апреля 2013

У меня была похожая проблема с ошибкой 503, но причиной была прокси. Если у вас есть прокси, просто используйте это:

request.Proxy = null;

request.Credentials = System.Net.CredentialCache.DefaultCredentials;

1 голос
/ 16 июля 2009

У меня была похожая проблема. Благодаря совету Fiddler я узнал, что это было вызвано настройками прокси в моей новой среде разработки. Очень надоедливый. Веб-сервисы .NET принимают настройки прокси, установленные в IE.

Для получения дополнительной информации, проверьте: http://support.microsoft.com/kb/307220 и http://msdn.microsoft.com/en-us/library/kd3cf2ex.aspx.

1 голос
/ 21 ноября 2008

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

Я протестировал его сегодня, давая заголовки и не давая заголовки http, а в последнем случае он сделал 503.

Если я найду дополнительную информацию, я постараюсь опубликовать ее здесь. Я надеюсь, что это экономит время и волосы другим людям:).

...