機能の1つとして、ユーザーが写真をキャプチャし、ksoapを使用してasp.net Webサービスに送信できるAndroidアプリケーション(API 10)があります。Android アプリは問題なく動作し、画像のバイト配列を含むすべてのデータをデータベースに送信します。SQL データベースには、バイト配列が格納されるデータ用の Image フィールドがあります。これはすべて期待どおりに機能します。ただし、何も破損していないこと、画像が適切に保存されていることなどをテストするときに、.ashx ページを使用して画像をレンダリングしようとすると、「壊れた画像」アイコンが表示されます。見落としている単純なものだと思いますが、長い間見つめていると意味がわかりません。
バイト配列を取得する Android アプリのスニペットを次に示します。
byte[] ba;
String filepath = "/sdcard/";
File imagefile = new File(filepath + "img.jpg");
FileInputStream fis = new FileInputStream(imagefile);
Bitmap bm = BitmapFactory.decodeStream(fis);
Bitmap sbm = Bitmap.createScaledBitmap(bm, 640, 480, false);
if(bm != null)
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
sbm.compress(Bitmap.CompressFormat.JPEG, 100, out);
ba = out.toByteArray();
}
SOAP を作成して実行する Android アプリのスニペットを次に示します。
SoapObject request = new SoapObject(NAMESPACE, SEND_METHOD_NAME);
request.addProperty("pkid", pkid);
request.addProperty("img", ba);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
MarshalBase64 marshal = new MarshalBase64();
marshal.register(envelope);
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(SEND_URL);
try
{
androidHttpTransport.call(SEND_SOAP_ACTION, envelope);
}
catch(Exception e)
{
e.printStackTrace();
}
SOAP メッセージを受信する ASP.Net Web サービスのスニペットは次のとおりです。
[WebService(Namespace = "http://www.domain.com")]
[System.Web.Services.Protocols.SoapDocumentService(RoutingStyle = System.Web.Services.Protocols.SoapServiceRoutingStyle.RequestElement)]
[System.ComponentModel.ToolboxItem(false)]
public class sendWorkOrderService : System.Web.Services.WebService
{
public SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["main"].ConnectionString);
[WebMethod(Description = "This is it", EnableSession = false)]
public void receive(int pkid, byte[] img)
{
if (img.Length > 0)
{
cmd = new SqlCommand("update table set photo = @arrayToInsert where pkid = " + pkid, con);
cmd.Parameters.Add("@arrayToInsert", SqlDbType.Image, 16).Value = img;
}
else
{
// do nothing
}
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
このアプリは既にこのサービスと別のサービスを正常に使用しています。唯一の問題は、画像ファイルをバイト配列として送信することです。これは機能しますが、テストで画像をレンダリングして、正常に送信されたことを確認できません。私が見逃しているのは単純なものだと確信しています。フィードバックに感謝します...