System.Net.WebException在Android Xamarin应用程序中
System.Net.WebException在Android Xamarin应用程序中
我正在通过Xamarin创建一个简单的登录Android应用程序。我使用了一个带有登录方法的asmx web服务,该方法检查SQL Server数据库中是否存在用户,并将其托管在IIS服务器上。我尝试通过手机浏览器访问它,一切都正常。然后我创建了我的应用程序并将web服务添加为web引用。但是当我将我的Android应用程序部署到手机上时,出现了这个异常。
我已经为我的应用程序启用了Internet属性。
异常的详细信息如下:
{System.Reflection.TargetInvocationException: 在操作过程中发生异常,使结果无效。请检查InnerException以获取异常详细信息。 ---> System.Net.WebException: 错误:ConnectFailure(无法连接到主机)--->
System.Net.Sockets.SocketException: 无法连接到主机 在
System.Net.Sockets.SocketAsyncResult.CheckIfThrowDelayedException() [0x00014] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net.Sockets/SocketAsyncResult.cs:127
在System.Net.Sockets.Socket.EndConnect(System.IAsyncResult
asyncResult) [0x0002c] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net.Sockets/Socket.cs:1211
在System.Net.Sockets.SocketTaskExtensions+<>c.b__2_1
(System.IAsyncResult asyncResult) [0x00000] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net.Sockets/SocketTaskExtensions.cs:36
在System.Threading.Tasks.TaskFactory
1[TResult].FromAsyncCoreLogic (System.IAsyncResult iar, System.Func2[T,TResult] endFunction,
System.Action
1[T] endAction, System.Threading.Tasks.Task
1[TResult]promise, System.Boolean requiresSynchronization) [0x00019] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/external/corert/src/System.Private.CoreLib/src/System/Threading/Tasks/FutureFactory.cs:538
--- End of stack trace from previous location where exception was thrown ---
在System.Net.WebConnection.Connect(System.Net.WebOperation
operation, System.Threading.CancellationToken cancellationToken)
[0x00151] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/WebConnection.cs:169
--- End of inner exception stack trace --- 在System.Net.WebConnection.Connect(System.Net.WebOperation operation,
System.Threading.CancellationToken cancellationToken) [0x00217] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/WebConnection.cs:188
在System.Net.WebConnection.InitConnection(System.Net.WebOperation
operation, System.Threading.CancellationToken cancellationToken)
[0x000cc] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/WebConnection.cs:259
在System.Net.WebOperation.Run() [0x00052] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/WebOperation.cs:268
在System.Net.WebCompletionSource
1[T].WaitForCompletion() [0x0008e] in /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/WebCompletionSource.cs:111 在System.Net.HttpWebRequest.RunWithTimeoutWorker[T] (System.Threading.Tasks.Task1[TResult] workerTask, System.Int32
timeout, System.Action abort, System.Func`1[TResult] aborted,
System.Threading.CancellationTokenSource cts) [0x000e8] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/HttpWebRequest.cs:956
在System.Net.HttpWebRequest.EndGetRequestStream(System.IAsyncResult
asyncResult) [0x00019] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/HttpWebRequest.cs:901
在
System.Web.Services.Protocols.SoapHttpClientProtocol.AsyncGetRequestStreamDone
(System.IAsyncResult ar) [0x0000c] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System.Web.Services/System.Web.Services.Protocols/SoapHttpClientProtocol.cs:118
--- End of inner exception stack trace --- 在System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary
() [0x00008] in
/Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/referencesource/System/compmod/system/componentmodel/AsyncCompletedEventArgs.cs:60
在newapplogin.selling.LoginCompletedEventArgs.get_Result() [0x00001]
in C:\Users\User\source\repos\Solution1\newapplogin\Web
References\selling\Reference.cs:178 在
newapplogin.MainActivity.Ws_LoginCompleted(System.Object sender,
newapplogin.selling.LoginCompletedEventArgs e) [0x00001] in
C:\Users\User\source\repos\Solution1\newapplogin\MainActivity.cs:62
在newapplogin.selling.WebService1.OnLoginOperationCompleted
(System.Object arg) [0x00016] in
C:\Users\User\source\repos\Solution1\newapplogin\Web
References\selling\Reference.cs:102 在
Android.App.SyncContext+<>c__DisplayClass3_0.b__0() [0x00000]
in <11f101b564894ca7af6c482ddc51c698>:0 在
Java.Lang.Thread+RunnableImplementor.Run() [0x00008] in
<11f101b564894ca7af6c482ddc51c698>:0 在
Java.Lang.IRunnableInvoker.n_Run(System.IntPtr jnienv, System.IntPtr
native__this) [0x00009] in <11f101b564894ca7af6c482ddc51c698>:0 在
(wrapper dynamic-method)
Android.Runtime.DynamicMethodNameCounter.15(intptr,intptr)} System.Reflection.TargetInvocationException
这是我的Android MainActivity代码:
using Android.App; using Android.OS; using Android.Support.V7.App; using Android.Runtime; using Android.Widget; using System; using Xamarin.Essentials; using Xamarin.Android; using Android.Content; namespace newapplogin { [Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true)] public class MainActivity : AppCompatActivity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); Xamarin.Essentials.Platform.Init(this, savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.activity_main); // Get our button from the layout resource, // and attach an event to it Button bulogin = FindViewById
这是我的Web服务代码:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Data.SqlClient; namespace WebApplication1 { ////// Summary description for WebService1 /// [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. // [System.Web.Script.Services.ScriptService] public class WebService1 : System.Web.Services.WebService { [WebMethod] public Result Login(string userName, string userPass) { SqlConnection conn=new SqlConnection (new DBConnection().ConnectionString); Result result = new Result(); try { SqlCommand cmd = new SqlCommand("SELECT username, password FROM people where CONVERT(VARCHAR, username)=@username and CONVERT(VARCHAR, password)=@password"); cmd.Parameters.AddWithValue("username", userName); cmd.Parameters.AddWithValue("password", userPass); cmd.Connection = conn; if (conn.State==System.Data.ConnectionState.Closed) { conn.Open(); } SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows) { result.ValidUser = true; return result; } else { result.ValidUser = false; } } catch(Exception ex) { result.Error = ex.ToString(); } finally { conn.Close(); } return result; } } }
可能的原因是什么?