调用返回JSON的API遇异常:控制台正常Web应用报错
VB.NET Web应用调用PhoneValidator API时连接异常求助
我用VB.NET编写了调用PhoneValidator API获取号码信息的代码,完全相同的逻辑在控制台测试程序中可正常运行,但放到Web应用中执行时,在request.GetResponse()这一行抛出连接异常,具体情况如下:
Web应用核心代码
Public Function GetNumberInfo(ByVal pPhoneNumber As String) As PhoneInformation Dim url As String = "https://api.phonevalidator.com/api/v3/phonesearch?apikey=[My_API_Key]&phone=" & pPhoneNumber & "&type=fake,basic" DebugLog("App:Registration (RegistrationMOD.vb/GetNumberInfo) - DEBUG URL string: " & url) Dim request = CType(WebRequest.Create(url), HttpWebRequest) Dim myReader As StreamReader request.Method = "GET" request.Accept = "application/json" request.ContentType = "application/json; charset=utf-8;" ' 异常发生在这一行 Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse) myReader = New System.IO.StreamReader(response.GetResponseStream) Dim responseString As String = "" responseString = myReader.ReadToEnd Dim j As JavaScriptSerializer = New JavaScriptSerializer() Dim MyPhone As PhoneInformation = j.Deserialize(Of PhoneInformation)(responseString) Return MyPhone End Function
异常日志信息
Debug log entries: App:Registration/CreateAccount - An error occurred executing CheckPhone, the error is: The underlying connection was closed: An unexpected error occurred on a receive. App:Registration/CreateAccount - Phone number submitted: 7029270000 Trace: System.Net.WebException(0x80131509): The underlying connection was closed: An unexpected error occurred on a receive. at Microsoft.VisualBasic.CompilerServices.Symbols.Container.InvokeMethod(Method TargetProcedure, Object[] Arguments, Boolean[] CopyBack, BindingFlags Flags) at Microsoft.VisualBasic.CompilerServices.NewLateBinding.ObjectLateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack) at Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack) at Registration.RegistrationMod.GetNumberInfo(String pPhoneNumber) in C:\Users\Presc\Documents\Visual Studio 2013\Projects\Registration\Registration\RegistrationMod.vb:line 20 at Registration.CreateAccount.CheckPhone(String pPhoneNumber) in C:\Users\Presc\Documents\Visual Studio 2013\Projects\Registration\Registration\CreateAccount.aspx.vb:line 241 Line:20 Filename: RegistrationMod.vb Line:241 Filename: CreateAccount.aspx.vb
已确认的正确信息
调试日志显示生成的请求URL完全正确:
App:Registration (RegistrationMOD.vb/GetNumberInfo) - DEBUG URL string: https://api.phonevalidator.com/api/v3/phonesearch?apikey=[My_API_Key]&phone=7029270000&type=fake,basic
控制台测试代码(可正常运行)
Imports System.IO Imports System.Net Imports Nancy.Json Module TestCodeMOD Public Function GetNumberInfo(ByVal pPhoneNumber As String) As PhoneInformation Dim url As String = "https://api.phonevalidator.com/api/v3/phonesearch?apikey=[My_API_Key]&phone=" & pPhoneNumber & "&type=fake,basic" Dim request = CType(WebRequest.Create(url), HttpWebRequest) Dim myReader As StreamReader request.Method = "GET" request.Accept = "application/json" request.ContentType = "application/json; charset=utf-8;" Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse) myReader = New System.IO.StreamReader(response.GetResponseStream) Dim responseString As String = "" responseString = myReader.ReadToEnd Dim j As JavaScriptSerializer = New JavaScriptSerializer() Dim MyPhone As PhoneInformation = j.Deserialize(Of PhoneInformation)(responseString) Return MyPhone End Function End Module
执行入口:
Sub Main() Dim MyPhone As PhoneInformation MyPhone = GetNumberInfo("7029270000") End Sub
求助需求
控制台程序能正常获取数据,但Web应用却抛出连接异常,求排查思路或解决建议。
内容的提问来源于stack exchange,提问作者Prescott Chartier
相关产品推荐
相关产品推荐

