СМС HTTP API вызов из ASP.NET идет медленно - PullRequest
1 голос
/ 04 октября 2011

Для веб-приложения я создаю модуль SMS, который может отправлять SMS из приложения. У моего провайдера SMS есть API, который я могу вызвать через HTTP.

API вызывается через XmlTextReader, который просто читает XML-ответ из API.

Теперь моя проблема заключается в следующем: когда я отправляю SMS с веб-страницы (в основном просто делаю HTTP-запрос), получение SMS занимает более минуты.

Но когда я запускаю тот же самый код из консольного приложения Windows, мое SMS приходит менее чем за 5 секунд.

Я провел несколько тестов с этим, и на самом деле это не мой провайдер SMS, который работает медленно. Каким-то образом HTTP-запрос задерживается из-за механизма ASP.NET, и он не задерживается напрямую из консольного приложения. Есть ли решение?

Вот как я называю HTTP API:

 Dim strPostString As String = Convert.ToString(muriPostUrl) & mstrPostPath
    If mblnUseSecureConnection Then
        strPostString = Convert.ToString(muriSecurePostUrl) & mstrPostPath
    End If

    Dim strDataString As String = "username=" & mstrUsername
    strDataString += "&" & "password=" & mstrPassword
    strDataString += "&" & "originator=" & mstrOriginator
    strDataString += "&" & "recipients=" & mstrRecipients
    strDataString += "&" & "gateway=" & mstrGateway
    strDataString += "&" & "reference=" & mstrReference
    strDataString += "&" & "message=" & mstrMessage

    If mstrType <> String.Empty Then
        strDataString += "&" & "type=" & mstrType
    End If

    If mstrUDH <> String.Empty Then
        strDataString += "&" & "udh=" & mstrUDH
    End If

    If Not mdtDeliveryDate = Nothing Then
        Dim objDeliveryDate As New StringBuilder()
        objDeliveryDate.Append(mdtDeliveryDate.Year)
        objDeliveryDate.Append(Prefix(mdtDeliveryDate.Month.ToString(), 2))
        objDeliveryDate.Append(Prefix(mdtDeliveryDate.Day.ToString(), 2))
        objDeliveryDate.Append(Prefix(mdtDeliveryDate.Hour.ToString(), 2))
        objDeliveryDate.Append(Prefix(mdtDeliveryDate.Minute.ToString(), 2))
        objDeliveryDate.Append(Prefix(mdtDeliveryDate.Second.ToString(), 2))
        strDataString += "&" & "deliverydate=" & Convert.ToString(objDeliveryDate)
    End If

    Dim strReturnValue As String = ""

    Dim xmlReader As New XmlTextReader(String.Format("{0}?{1}", strPostString, strDataString))

    While xmlReader.Read()
        If xmlReader.NodeType = XmlNodeType.Element Then
            Select Case xmlReader.LocalName
                Case "recipients"
                    If True Then
                        mintSuccessCount = Integer.Parse(xmlReader.ReadString())
                        strReturnValue += "recipients : " & mintSuccessCount.ToString() & vbCr & vbLf
                        Exit Select
                    End If
                Case "success"
                    If True Then
                        mblnSuccess = Boolean.Parse(xmlReader.ReadString())
                        strReturnValue += "success : " & mblnSuccess.ToString() & vbCr & vbLf
                        Exit Select
                    End If
                Case "resultcode"
                    If True Then
                        mintResultCode = Integer.Parse(xmlReader.ReadString())
                        strReturnValue += "resultcode : " & mintResultCode.ToString() & vbCr & vbLf
                        Exit Select
                    End If
                Case "resultmessage"
                    If True Then
                        mstrResultMessage = xmlReader.ReadString()
                        strReturnValue += "resultmessage : " & mstrResultMessage & vbCr & vbLf
                        Exit Select
                    End If
            End Select
        End If
    End While

Кроме того, при выполнении HTTP-запроса от ASP.NET он не отображается в Fiddler , в то время как фактический HTTP-запрос происходит. Как я могу отслеживать HTTP-возврат из механизма ASP.NET?

Я все еще не знаю, в чем проблема, но я обошел ее, выполнив обратную передачу через HttpWebRequest напрямую. Я думаю, что проблема была где-то в цикле while.

...