在MonoDroid中使用Web服务非常慢

时间:2012-01-30 15:09:57

标签: android xamarin.android

整个应用程序中使用了Web服务中的许多其他方法,并且工作正常。只有一种方法特别惹麻烦。当直接从浏览器调用该方法时,结果是非常即时的,因此Web服务本身似乎没问题。但是,如果在此特定方法使用服务的行上放置断点,则所有内容都会冻结约1.5到2分钟。切换到异步版本的方法并停止应用程序冻结,但该方法的结果不在SQL数据库中相同的1.5到2分钟。这种方法在几天前就可以正常工作,然后突然开始这样做。

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);

        if (resultCode == Result.Ok && requestCode == 0)
        {
            var settings = PreferenceManager.GetDefaultSharedPreferences(this);
            var assetID = settings.GetString("unit", null);
            var sender = settings.GetString("sender", null);

            var conn = inst2.conn();
            var c = conn.CreateCommand();
            c.CommandText = "Select Contract From CurrentContract";
            var transID = 0;
            try
            {
                conn.Open();
                SqliteDataReader dr = c.ExecuteReader();

                if (dr.HasRows)
                {
                    dr.Read();
                    transID = Convert.ToInt32(dr[0].ToString());
                }
                dr.Close();
                conn.Close();
            }
            catch (System.Exception ex)
            {             
                conn.Close();
                Dialog d = inst2.showBuilder(this, "Error", ex.Message);
                d.Show();
            }

            TableLayout tl = (TableLayout)FindViewById(Resource.Id.myEquip);
            View v1 = tl.FindViewWithTag(sender);
            Button bt = (Button)v1;

            Bitmap bitmap = (Android.Graphics.Bitmap)data.Extras.Get("data");
            string base64String = "";

            using (var stream = new System.IO.MemoryStream())
            {
                bitmap.Compress(Android.Graphics.Bitmap.CompressFormat.Png, 0, stream);
                byte[] imageBytes = stream.ToArray();
                base64String = Convert.ToBase64String(imageBytes);
            }

            try
            {
                //This is where it gets stuck
                inst.saveImage(base64String, assetID, transID);                  
                bt.Visibility = ViewStates.Invisible;
                conn.Open();
                c.CommandText = "Drop Table If Exists CurrentContract";
                c.ExecuteNonQuery();
                conn.Close();
            }
            catch (System.Exception ex)
            {
                conn.Close();
                Dialog d = inst2.showBuilder(this, "Error", ex.Message);
                d.Show();
            }


        }

    }

inst.saveImage是一个运行SQL存储过程的void,它只是使用包含摄像头意图值的base64编码字符串更新合同行。

    [WebMethod]
    public void saveImage(string stream, string assetID, int transID)
    {

        var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ToString());
        var comm = new SqlCommand("saveContractImage", conn);
        comm.CommandType = System.Data.CommandType.StoredProcedure;
        comm.Parameters.AddWithValue("@AssetID", assetID);
        comm.Parameters.AddWithValue("@TransID", transID);
        comm.Parameters.AddWithValue("@Bytes", stream);

        try
        {
            conn.Open();
            comm.ExecuteNonQuery();
            conn.Close();
        }
        catch (Exception ex)
        {
            conn.Close();
            throw (ex);
        }
    }

1 个答案:

答案 0 :(得分:0)

我认为这可能是特定于设备的。之后在其他设备上使用过,似乎工作正常。