0
Webサービスの他の多くのメソッドがアプリケーション全体で使用されています。特に1つの方法だけが問題を起こしています。メソッドがブラウザから直接呼び出されると、結果はかなり瞬間的なものになるので、Webサービス自体は問題ないようです。しかし、この特定のメソッドでサービスが使用される行にブレークポイントが置かれると、すべてが約1.5〜2分間フリーズします。メソッドの非同期バージョンに切り替えてフリーズからアプリケーションを停止しましたが、メソッドの結果は同じ1.5〜2分間SQLデータベースにありません。この方法は数日前までうまくいってから突然このように動作し始めました。MonoDroidでのWebサービスの消費が極端に遅い
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は単にカメラインテントからの値を含むbase64でエンコードされた文字列との契約の行を更新するSQLストアドプロシージャを実行する空隙です。
[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);
}
}