System. Net .WebException в android приложении xamarin - PullRequest
0 голосов
/ 08 апреля 2020

Я создаю простое приложение для входа в систему android через Xamarin. Я создал веб-службу asmx с методом входа в систему, который проверяет, существует ли пользователь в базе данных, найденной на SQL сервере, и размещал ее на сервере IIS. Я попытался получить к нему доступ через браузер моего телефона, и все прошло хорошо. Затем я создал свое приложение и добавил веб-сервис в качестве веб-ссылки. но когда я развернул приложение android на своем телефоне, это исключение произошло.

Я включил свойство Inte rnet для своего приложения.

Подробности исключения следующие:

{Система .Reflection.TargetInvocationException: во время операции произошло исключение, делающее результат недействительным. Проверьте InnerException для подробностей исключения. ---> System. Net .WebException: ошибка: ConnectFailure (нет маршрута к хосту) ---> System. Net .Sockets.SocketException: нет маршрута к хосту в System. Net .Sockets.SocketAsyncResult. CheckIfThrowDelayedException () [0x00014] в /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/System/System.Net.Sockets/SocketAsyncResult.cs:127 в системе. 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 в System. 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] обещание, System.Boolean требует синхронизации) [0x00019] в / Users / builder / jenkins / рабочее пространство / архив-моно / 2019-08 / android / выпуск / внешний / corert / src / System.Private.CoreLib / src / System / Threading / Tasks / FutureFactory.cs: 538

--- Конец трассировка стека от предыдущего местоположения, где было сгенерировано исключение ---

в System. Net .WebConnection.Connect (System. Net .WebOperation, System.Threading.CancellationToken cancellationToken) [0x00151] в / Пользователи / строитель / jenkins / workspace / archive-mono / 2019-08 / android / release / mcs / class / System / System.Net / WebConnection.cs: 169 --- конец трассировки стека внутренних исключений --- в системе. Net .WebConnection.Connect (System. Net .WebOperation операция, System.Threading.CancellationToken cancellationToken) [0x00217] в / 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 операция, System.Threading.CancellationToken cancellationToken) [0x000cc] в / Users / builder / Дженкинс / рабочее пространство / арчи ve-mono / 2019-08 / android / release / mcs / class / System / System.Net / WebConnection.cs: 259 в System. Net .WebOperation.Run () [0x00052] в / Users / строитель / jenkins / рабочая область / архив-моно / 2019-08 / android / выпуск / mcs / class / System / System.Net / WebOperation.cs: 268 в системе. 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 at System.Net.HttpWebRequest.RunWithTimeoutWorker[T] (System.Threading.Tasks.Task 1 [TResult] workerTask, время ожидания System.Int32 , System.Action abort, System.Func`1 [TResult] прерван, System.Threading.CancellationTokenSource cts) [0x000e8] в / 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] в / 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] в / Users / builder / jenkins архив-моно / 2019-08 / Android / выпуск / MCS / класс / System.Web.Se rvices / System.Web.Services.Protocols / SoapHttpClientProtocol.cs: 118 --- Конец внутренней трассировки стека исключений --- в System.ComponentModel. AsyncCompletedEventArgs.RaiseExceptionIfNeeded () [0x00008] в /Users/builder/jenkins/workspace/archive-mono/2019-08/android/release/mcs/class/referencesource/System/compmod/system/componentmodel/AsyncCompletedEvent newapplogin.selling. отправитель, newapplogin.selling.LoginCompletedEventArgs e) [0x00001] в C: \ Users \ Пользователь \ source \ repos \ Solution1 \ newapplogin \ MainActivity.cs: 62
в newapplogin.selling.WebService1.OnLoginOperationCompleted (System.Object) arg) [0x00016] в C: \ Users \ Пользователь \ source \ repos \ Solution1 \ newapplogin \ Web References \ selling \ Reference.cs: 102 в Android .App.SyncContext + <> c__DisplayClass3_0.b__0 () [0x00000 ] в <11f101b564894ca7af6c482ddc51c698>: 0 в Java .Lang.Thread + RunnableImplementor.Run () [0x00008] в <11f101b564894ca7af6c482ddc51c698>: 0 в Java .Lang.IRunnableInvoker.n_Run (System.IntPtr jnienv, System.IntPtr native__this) [0x00009] в <11f101b564894ca7af6c482ddc51c698>: 0 в (оберточная машина , 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;
        }

    }
}

В чем может быть причина?

1 Ответ

0 голосов
/ 16 апреля 2020

проблема была с моим ip. оно менялось, потому что оно было установлено как динамическое c. поэтому, когда мое приложение пытается получить доступ к веб-сервису, оно не находит его. поэтому я просто установил ip своего ноутбука на stati c, и проблема была решена. спасибо за вашу помощь

...