对于 Web 应用程序,我正在创建一个可以从应用程序发送 SMS 的 SMS 模块。我的 SMS 提供商有一个 API,我可以通过 HTTP 调用它。
API 是通过一个 XmlTextReader 调用的,该 XmlTextReader 只是从 API 读取 XML 响应。
现在我的问题是:当我从网页发送短信(基本上只是做一个 HTTP 请求)时,我需要一分钟多的时间才能收到短信。
但是,当我从 Windows 控制台应用程序运行完全相同的代码时,我的 SMS 在不到 5 秒的时间内到达。
我已经对此进行了多次测试,并不是我的短信提供商真的很慢。不知何故,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
此外,当从 ASP.NET 执行 HTTP 请求时,它不会出现在Fiddler中,而实际的 HTTP 请求会发生。如何从 ASP.NET 引擎中跟踪 HTTP 快速回退?
我仍然不知道问题是什么,但我通过直接通过 HttpWebRequest 进行回发来解决它。我认为问题出在while循环中。