Как я могу узнать, почему классическая страница ASP не отвечает на запрос HttpWebRequest? - PullRequest
1 голос
/ 14 октября 2019

Префикс: К сожалению, переписать эти классические страницы ASP в ASP.NET нельзя. Это сложное унаследованное приложение, которое мы поддерживаем.

У меня проблемы с получением HttpWebRequest для POST на странице Classic ASP в том же веб-приложении. Страница работает быстро и правильно в браузере.

Ожидаемый результат:

HttpWebRequest должен POST к странице и получить результат HTML.

Фактический результат:

HttpWebRequest ожидает 100-секундный тайм-аут по умолчанию и затем завершается неудачей.

Сообщение об ошибке:

System.Net.WebException
  HResult=0x80131509
  Message=The operation has timed out

Вещи, которые я пробовал:

  • Добавлен CookieContainer, как предложено здесь
  • WrappedHttpWebResponse в блоке Using, как предлагалось здесь
  • Попытка проверки HTTP-трафика с помощью Telerik Fiddler (трафик не был записан для запроса)
  • Чтобы исключить саму страницу ASP в качестве виновника, ее содержание уменьшено до минимума:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8" />
        <title>Page</title>
      </head>
      <body>
        <p>This is the page.</p>
      </body>
    </html>
    

Вот код: (Сбой в строке 32, GetResponse())

---------------------------------------------------
 Generic Handler: SignIn.ashx
---------------------------------------------------

 1    Imports System.Net
 2
 3    Public Class Labels
 4       Implements IHttpHandler
 5
 6       Sub ProcessRequest(Context As HttpContext) Implements IHttpHandler.ProcessRequest
 7         Dim oFormData As NameValueCollection
 8         Dim oResponse As HttpWebResponse
 9         Dim sResponse As String
10         Dim aPostData As Byte()
11         Dim oRequest As HttpWebRequest
12         Dim sUrl As String
13
14         sUrl = "http://domain.local/signin.asp"
15
16         oFormData = HttpUtility.ParseQueryString(String.Empty)
17         oFormData.Add("username", "username")
18         oFormData.Add("password", "password")
19
20         aPostData = Encoding.ASCII.GetBytes(oFormData.ToString)
21
22         oRequest = WebRequest.Create(sUrl)
23         oRequest.AllowAutoRedirect = False
24         oRequest.ContentLength = aPostData.Length
25         oRequest.ContentType = "application/x-www-form-urlencoded"
26         oRequest.Method = WebRequestMethods.Http.Post
27
28         Using oStream = oRequest.GetRequestStream
29           oStream.Write(aPostData, 0, aPostData.Length)
30         End Using
31
32         oResponse = oRequest.GetResponse
33
34         Using oReader As New StreamReader(oResponse.GetResponseStream)
35           sResponse = oReader.ReadToEnd
36         End Using
37       End Sub
38
39       ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
40         Get
41           Return False
42         End Get
43       End Property
44    End Class

Как я могу отладить это и определить, что происходит? (Обратите внимание, что статические страницы HTML загружаются очень хорошо, а также файлы ASPX и ASHX. Это происходит только со страницами Classic ASP.)

Ответы [ 2 ]

0 голосов
/ 15 ноября 2019

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

Не вызывайте сеанс вотвечающая страница, и это может прояснить ситуацию.

0 голосов
/ 06 ноября 2019

Это был странный мяч. Но он ушел после следующей перезагрузки.

...