使用WebServices时的Xamarin Android问题和问题(SOAP .NET 2.0)

时间:2014-04-25 13:07:17

标签: c# android web-services soap xamarin

在过去的几周里,我一直在使用Xamarin和Webservices(在Xamarin中称为.NET 2.0 Web服务)。而且我遇到了一些我无法解决的问题。

1st)如何设置webservice的超时?无论其值如何,都会忽略Timeout属性。我相信使用的默认值大约是30秒。但是我想要5秒~~。

2nd)当WebService使用Begin调用任何方法async时。无论如何都要检查异步方法是否正确完成或超时?我必须“检查”的唯一方法是在End方法中执行try / catch。如果由于超时而被触发,则会引发异常。但我想知道是否有某些属性或方法会告诉我webservice调用是否超时或是否正确处理。这里使用的webservice方法是“IsAlive”。

WebService.MainService.BeginIsAlive ((ar) => 
{ 
    try 
    { 
        bool result = WebService.MainService.EndIsAlive (ar); //If timedout will raise an exception. 
        RunOnUiThread (() => 
        { 
            Toast.MakeText (this, "Running as expected...", ToastLength.Long).Show();
        });

        StartActivity (typeof(OtherScreen));
    } 
    catch (Exception ex) 
    {
            //Probably timeout.
    }
}, null);

3rd)有没有办法取消web服务异步操作?例如“CancelIsAlive”。我找到的唯一方法是Webservice.Abort。但我不认为这是一种最佳实践,因为它不具体,它可能会搞砸所有事情。

先谢谢,LuísHenrique。

1 个答案:

答案 0 :(得分:1)

这就是我通常用来调用WebServices并控制它们(假设你的ws函数需要一个字符串并返回一个字符串):

    public static void CallSomeFunction(string SomeParameter, Action<string> Ok, Action Error, Activity Context)
    {
        ThreadPool.QueueUserWorkItem ((object e) => {


            var proxy = new YourProxyClass();
            proxy.Timeout = 10000;

            try{

                var res = proxy.YourFunction(SomeParameter);
                Context.RunOnUiThread(() => Ok(res));

            }
            catch(Exception Ex){

                if(Error != null)
                    Context.RunOnUiThread(Error);

            }


        });
    }

这是我执行异步任务的方式,使用ThreadPool进行同步调用,如果一切正常或错误,则传递一些Actions来执行。此外,我正在传递一个Context,因此我的Ok和Error操作将在UI线程中执行。