整个应用程序中使用了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);
}
}
答案 0 :(得分:0)
我认为这可能是特定于设备的。之后在其他设备上使用过,似乎工作正常。