Webアプリケーションの場合、アプリケーションからSMSを送信できるSMSモジュールを作成しています。私のSMSプロバイダーには、HTTP経由で呼び出すことができるAPIがあります。
APIは、APIからXML応答を読み取るだけのXmlTextReaderを介して呼び出されます。
今私の問題は次のとおりです。WebページからSMSを送信する場合(基本的にはHTTPリクエストを実行するだけです)、SMSを受信するまでに1分以上かかります。
しかし、Windowsコンソールアプリケーションからまったく同じコードを実行すると、SMSが5秒以内に届きます。
私はこれを使って複数のテストを行いましたが、遅いのは実際には私のSMSプロバイダーではありません。どういうわけか、HTTP要求はASP.NETエンジン内から遅延し、コンソールアプリケーションから直接遅延することはありません。解決策はありますか?
これは私がHTTPAPIを呼び出す方法です:
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要求を実行する場合、実際のHTTP要求が発生している間は、 Fiddlerには表示されません。ASP.NETエンジン内からHTTPファストバックを追跡するにはどうすればよいですか?
問題が何であるかはまだわかりませんが、HttpWebRequestを介して直接ポストバックを実行することで回避しました。問題はwhileループのどこかにあったと思います。