System.Net.WebException在Android Xamarin应用程序中

22 浏览
0 Comments

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.Func

2[T,TResult] endFunction,

System.Action1[T] endAction, System.Threading.Tasks.Task1[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.Task

1[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;
        }
    }
}

可能的原因是什么?

0
0 Comments

在Android Xamarin应用中出现了System.Net.WebException的问题。问题出现的原因是我的IP地址是动态的,所以每当我的应用程序尝试访问Web服务时,找不到它。所以我将我的笔记本电脑的IP地址设置为静态,问题就解决了。谢谢你的帮助。

如果你解决了这个问题,请在三天后将其标记为答案。

0