繁体   English   中英

android xamarin 应用程序中的 System.Net.WebException

[英]System.Net.WebException in android xamarin application

我正在通过 Xamarin 创建一个简单的登录 android 应用程序。 我使用登录方法创建了一个 asmx web 服务,该方法检查用户是否存在于 SQL 服务器中的数据库中,并将其托管在 IIS 服务器上。 我尝试通过手机浏览器访问它,一切正常。 然后我创建了我的应用程序并添加了 web 服务作为 web 参考。 但是当我在我的手机上部署我的 android 应用程序时,发生了这个异常。

我为我的应用程序启用了 Internet 属性。

异常详情如下:

{System.Reflection.TargetInvocationException:操作过程中发生异常,导致结果无效。 检查 InnerException 以获取异常详细信息。 ---> System.Net.WebException: Error: ConnectFailure (No route to host) ---> System.Net.Sockets.SocketException: No route to host at System.Net.Sockets.SocketAsyncResult.CheckIfThrowDelayedException () [0x0001]在 /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] 在 /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net.Sockets/Socket.cs:1211 在系统。 Net.Sockets.SocketTaskExtensions+<>c.b__2_1 (System.IAsyncResult asyncResult) [0x00000] 在 /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.Func 2[T,TResult] endFunction, System.Action 1[T] endAction, System.Threading.Tasks.Task 1[TResult] promise, System.Boolean 需要同步) [0x00019] /archive-jenkive/工作空间mono/2019-08/android/release/external/corert/src/System.Private.CoreLib/src/System/Threading/Tasks/FutureFactory.cs:538

--- 从先前抛出异常的位置结束堆栈跟踪 ---

在 /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/ 中的 System.Net.WebConnection.Connect(System.Net.WebOperation 操作,System.Threading.CancellationToken cancelToken)[0x00151] class/System/System.Net/WebConnection.cs:169 --- 内部异常堆栈跟踪结束 --- 在 System.Net.WebConnection.Connect (System.Net.WebOperation 操作,System.Threading.CancellationToken cancelToken) [0x00217 ] 在 System.Net.WebConnection.InitConnection 的 /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/WebConnection.cs:188 .WebOperation 操作,System.Threading.CancellationToken cancelToken) [0x000cc] 在 /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/WebConnection.cs: 259 在 System.Net.WebOperation.Run () [0x00052] 在 /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/WebOperation.cs: 268 在 System.N /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/WebCompletionSource.cs 中的 et.WebCompletionSource 1[T].WaitForCompletion () [0x0008e] in /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/WebCompletionSource.cs:111 at System.Net.HttpWebRequest.RunWithTimeoutWorker[T] (System.Threading.Tasks.Task 1[TResult] workerTask,System.Int32 超时,System.Action 中止,System.Func`1[TResult] 中止,System.Threading。 CancellationTokenSource cts) [0x000e8] 在 System.Net.HttpWebRequest 的 /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/HttpWebRequest.cs:956 中。 EndGetRequestStream (System.IAsyncResult asyncResult) [0x00019] 在 System./Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net/HttpWebRequest.cs:901 /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System 中的 Web.Services.Protocols.SoapHttpClientProtocol.AsyncGetRequestStreamDone (System.IAsyncResult ar) [0x0000c]。 Web.Services/System.Web.Services.Protocols/SoapHttpClientProtocol.cs:118 --- 内部异常堆栈跟踪结束---在 System.ComponentModel.AsyncCompletedEventArgs.RaiseException/IfNecessary () workspace/archive-mono/2019-08/android/release/mcs/class/referencesource/System/compmod/system/componentmodel/AsyncCompletedEventArgs.cs:60 at newapplogin. sell.LoginCompletedEventArgs.get_Result () [0x00001] in C:\ Users\User\source\repos\Solution1\newapplogin\Web References\selling\Reference.cs:178 at newapplogin.MainActivity.Ws_LoginCompleted (System.Object sender, newapplogin.selling.LoginCompletedEventArgs e) [0x00001] in C:\Users\用户\源\repos\Solution1\newapplogin\MainActivity.cs:62
at newapplogin.selling.WebService1.OnLoginOperationCompleted (System.Object arg) [0x00016] in C:\Users\User\source\repos\Solution1\newapplogin\Web References\selling\Reference.cs:102 at Android.App.SyncContext+< >c__DisplayClass3_0.b__0 () [0x00000] in <11f101b564894ca7af6c482ddc51c698>:0 at Java.Lang.Thread+RunnableImplementor.Run () [0x00008] in <11f101b564894ca7af6c482ddc51c698>:0 at Java.Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] in <11f101b564894ca7af6c482ddc51c698>:0 at (wrapper dynamic-method) Android.Runtime.DynamicMethodNameCounter.15(intptr,intptr)} System.Reflection.TargetInvocationException

这是我的 android 主要活动代码:

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<Button>(Resource.Id.bulogin);

            Button buRegister = FindViewById<Button>(Resource.Id.buRegister);



            //buRegister.Click += BuRegister_Click;

            bulogin.Click += Bulogin_Click;


        }
        private void Bulogin_Click(object sender, EventArgs e)

        {

            var etUsername = FindViewById<EditText>(Resource.Id.etUsername);

            var etPassword = FindViewById<EditText>(Resource.Id.etPassword);

            selling.WebService1 ws = new selling.WebService1();
            ws.LoginAsync(etUsername.Text, etPassword.Text);
            ws.LoginCompleted += Ws_LoginCompleted;



        }



        private void Ws_LoginCompleted(object sender, selling.LoginCompletedEventArgs e)

        {



            if (e.Result.ValidUser)

            {

                Toast.MakeText(getApplicationContext(), "successful", 0).Show();



            }

            else


            {
                Toast.MakeText(getApplicationContext(), "failed", 0).Show();

            }

        }

        private Context getApplicationContext()
        {
            throw new NotImplementedException();
        }

        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
}

这是我的网络服务代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data.SqlClient;



namespace WebApplication1
{
    /// <summary>
    /// Summary description for WebService1
    /// </summary>
    [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;
        }

    }
}

可能是什么原因?

问题出在我的 ip 上。 它正在改变,因为它被设置为动态的。 所以每当我的应用程序尝试访问网络服务时,它都找不到它。 所以我只是将笔记本电脑的 ip 设置为 static 并解决了问题。 感谢您的帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM