繁体   English   中英

KSOAP Android和ASP.NET Web服务

[英]KSOAP Android and ASP.NET web service

我想知道是否有人可以帮助我了解这个问题。 我正在使用包含Web方法存储数据的Web服务。 数据是使用kso​​ap库从Android手机发送来发送信封的。 我能够将数据从手机发送到服务器,并且Web方法可以通过NPGSQL和POSTGRES执行该功能来存储数据。

当我发送数据超过20次时,问题开始出现,Web服务不再接收数据。 我不知道这是ksoap的问题还是我的Web服务的问题。

Android代码

soap_server_retrieve.setOnClickListener(new OnClickListener() {
    volatile boolean flag = true;           

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask() {
            String result;
            String NAMESPACE = "http://demo.android.org/";
            String URL = "http://192.168.1.9/AndroidServer/WebService.asmx";
            String METHOD_NAME = "sensor_value";
            String SOAP_ACTION = "http://demo.android.org/sensor_value";
            int TimeOut=3000;

            @Override
            public void run() {
                try{
                    StrictMode.ThreadPolicy policy = new    StrictMode.ThreadPolicy.Builder().permitAll().build();
                    StrictMode.setThreadPolicy(policy);
                    SoapObject request = new SoapObject(NAMESPACE,METHOD_NAME);
                    request.addProperty("a",  Double.parseDouble(textTEMPERATURE_reading.getText().toString()));

                    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                    envelope.implicitTypes= true;
                    envelope.dotNet = true;
                    envelope.encodingStyle= SoapSerializationEnvelope.XSD;
                    envelope.setOutputSoapObject(request);
                    MarshalDouble md = new MarshalDouble();
                    md.register(envelope);

                    HttpTransportSE transport = new HttpTransportSE(URL,TimeOut);
                    try {
                        transport.call(SOAP_ACTION, envelope);
                        SoapPrimitive result_xml = (SoapPrimitive)     envelope.getResponse();
                        result = result_xml.toString();
                    } catch (HttpResponseException e) { 
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        //Toast.makeText(Ambiental_temperature.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        //Toast.makeText(Ambiental_temperature.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                    } catch (XmlPullParserException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        //Toast.makeText(Ambiental_temperature.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                }
                catch(Exception e)
                {
                    txt_server_value.setText(e.toString());
                }                       

                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        Toast.makeText(Ambiental_temperature.this,
                                result, Toast.LENGTH_LONG).show();
                        txt_server_value = (TextView) findViewById(R.id.txt_server_value);
                        //TextView result = (TextView) findViewById(R.id.txt_server_value);
                        //txt_server_value.setText("Sensor.TYPE_AMBIENT_TEMPERATURE NOT Available");
                        txt_server_value.setText(result);
                    }
                });
            }
        }, 0, 5000);
    }
});

ASP.NET Web服务

[WebMethod(CacheDuration = 60)]
public double sensor_value(double a)
{
    DateTime now = DateTime.Now;
    string query;
    query = "insert into sensor_values VALUES (@id,@sensor_name,@value,@date)";
    NpgsqlConnection cnt = new NpgsqlConnection("Server=localhost;Port=5433; User Id=postgres;Password=admin;Database=Android_Sensors");
    cnt.Open();        
    NpgsqlCommand command = new NpgsqlCommand(query, cnt);
    command.Parameters.Add(new NpgsqlParameter("id", "1"));
    command.Parameters.Add(new NpgsqlParameter("sensor_name", "Ambiental Temperature"));
    command.Parameters.Add(new NpgsqlParameter("value", a));
    command.Parameters.Add(new NpgsqlParameter("date",now));
    try
    {
        NpgsqlDataReader dr = command.ExecuteReader();
    }                
    catch (NpgsqlException ex)
    {

    }
    cmb_Tables.Text + " and " + cmb_Tables2.Text, "");
    table in the datagridview dgv_table

    return a;
}

我不明白的是,为什么当我向Web服务发送20倍数据时,它不再能够接收?

如果重建网页并重新发布网站,则我可以再次发送20个值,然后就无法再通过电话发送了,这暗示了我的Web服务可能是问题。 我真的很感谢您的帮助。

如果有多个呼叫,请在每次呼叫后尝试断开连接。

transport.getConnection().disconnect();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM