そこで、IIS を介して C# で Web サービスをセットアップしました。私には3つの方法があります。2 つは機能しますが、1 つはパラメーターとしてブール値を含みません。
Android ksoap2 のブール値と .net の定義が異なるようです。そのため、Web サービスに接続すると、すべてのパラメーターがデフォルト値 (int の場合は 0、bool の場合は false) になります。
bool の代わりに int を渡すように Android コードを変更し、int を受け入れて bool に変換するように Web サービスを変更しました。
しかし、賢い解決策はありますか?
[WebService(Namespace = "http://myNameSpace/")]
....
[WebMethod] //This works fine!
public List<myCustomClass> GetData()
{
myEntities db = new myEntities();
return db.myCustomClassTable.ToList();
}
[WebMethod] //This works fine!
public List<myCustomClass> GetDataByID(int id)
{
myEntities db = new myEntities();
var res = from p in db.myCustomClassTable where p.id == id select p;
return res.ToList();
}
[WebMethod] //This DOESNT work with android ksoap2
public List<myCustomClass> GetDataBySomeBool(int id, boolean someBool)
{
..... // I set up some logging here to check incoming params
myEntities db = new myEntities();
var res = from p in db.myCustomClassTable
where p.id == id && p.SomeBool == someBool
select p;
return res.ToList();
}
私の Android コード:
public static String Get_Data(int id, bool someBool) {
try {
SoapObject request = new SoapObject("http://myNameSpace/", "GetDataBySomeBool");
// Use this to add parameters
PropertyInfo pi1 = new PropertyInfo(), pi2 = new PropertyInfo();
pi1.setName("id");
pi1.setValue(id);
pi1.setType(int.class);
request.addProperty(pi1);
pi2.setName("someBool");
pi2.setValue(someBool);
pi2.setType(boolean.class);
request.addProperty(pi2);
// Declare the version of the SOAP request
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
try {
String SOAP_ACTION = "http://myNameSpace/GetDataBySomeBool";
androidHttpTransport.call(SOAP_ACTION, envelope);
} catch (Exception e) {
e.printStackTrace();
}
SoapObject result = (SoapObject) envelope.bodyIn;
if (result != null) {
.....
}
} catch (Exception err) {
err.printStackTrace();
return null;
}
return null;
}