Android ksoap2 Microsoft Webservice - 无法将参数传递给webservice

时间:2012-06-15 10:10:01

标签: android visual-studio-2010 web-services soap ksoap2

我正在学习如何使用以下方法创建Android应用和web服务: Eclipse IDE 带有依赖关系的ksoap2 2.6.5版 Visual Studio 2010

我的方法是遵循这个很棒的教程:http://www.youtube.com/watch?v=v9EowBVgwSo&feature=related

本教程适用于w3schools测试网络服务。

然后我尝试编写自己的web服务并使用Visual Studio中提供的helloworld webservice来启动我。我推荐我的代码指向新的webservice(在我的开发笔记本电脑上发布)并在调试模式下在我的手机上运行。

调用HelloWorld()webservice时,与webservice的通信很好。它甚至从simpleMethod()返回一个结果,但它不包括我传递它的参数。例如当调用simpleMethod时,Iam返回以下字符串:“Hello”

我认为这是webservice的一个问题,因为它适用于w3schools测试网络服务,但我感到困惑,并希望得到一些帮助。

我的代码如下:

web服务:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace WMCMobileWebService
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://testuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod]
        public string simpleMethod(String srt)
        {
            return "Hello " + srt;
        }
    }
}

Android应用程序MainActivity:

package com.clcltd.soaptest;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;

public class SoapTestActivity extends Activity {
    private static final String SOAP_ACTION = "http://testuri.org/simpleMethod";
    private static final String METHOD_NAME = "simpleMethod";
    private static final String NAMESPACE = "http://tempuri.org/";
    private static final String URL = "http://192.168.2.22/wmcmobilewebservice/Service1.asmx";
    PropertyInfo pi;
    TextView tv, tvc;
    String str;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView) findViewById(R.id.textView1);
        tvc = (TextView) findViewById(R.id.textView2);
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

        str = "Andy";

        pi = new PropertyInfo();
        pi.setName("srt");
        pi.setValue(str);
        pi.type = PropertyInfo.STRING_CLASS;

        request.addProperty(pi);

        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        soapEnvelope.dotNet = true;
        soapEnvelope.setOutputSoapObject(request);

        HttpTransportSE aht = new HttpTransportSE(URL);
        try{
            aht.call(SOAP_ACTION, soapEnvelope);
            SoapPrimitive resultString = (SoapPrimitive) soapEnvelope.getResponse();
            tv.setText("Status: " + resultString);
            tvc.setText(request.toString());
        }catch (Exception e)
        {
            e.printStackTrace();
            tv.setText("Error" + e.toString());
        }
    }
}

运行上面的代码时,我在屏幕上显示以下输出:

状态:您好 simpleMethod {SRT =安迪; }

我希望结果是:

状态:你好安迪

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

要接收字符串,请尝试:

SoapObject res = (SoapObject)soapEnvelope.getResponse();
tv.setText("Status: " + res.toString());

答案 1 :(得分:0)

我花了一些时间,但最后我找到了另一个教程(http://sarangasl.blogspot.co.uk/2010/09/create-simple-web-service-in-visual.html),详细说明了如何在较旧版本的KSOAP上使用KSOAP2 Web服务。

本教程包含指向包含旧版KSOAP的代码的链接。

作为测试,我将最新的KSOAP版本放在这个新项目中,它停止工作,所以看起来我的问题毕竟与版本有关。

希望将其他人指向本教程将帮助他们。