【问题标题】:ksoap2 AsyncTask PropertyInfo not recevied to webservice, why?ksoap2 AsyncTask PropertyInfo 未接收到 web 服务,为什么?
【发布时间】:2014-04-19 17:04:03
【问题描述】:

我需要向我的网络服务发送一些参数并获得结果。我在 lib 中使用了 ksoap2-android-assembly-2.4-jar-with-dependencies.jar,我的 Web 服务工作正常:

        [WebMethod]
    public string TestParams(string userName, string password, string startRowIndex, string maximumRows, string OrderType, string IdOpera)
    {
        return userName + " - " + password + " - " + startRowIndex + " - " + maximumRows + " - " + OrderType + " - " + IdOpera;
    }

在主要的java代码中:

    private class AsyncCall extends AsyncTask<String, Void, SoapObject > {
    @Override
    protected SoapObject doInBackground(String... params) {

        if (Constants.DEBUG)Log.i(Constants.LOGTAG, "doInBackground");
        AsynGetSellList list = new AsynGetSellList();
        AsynGetSellList.setMAIN_REQUEST_URL(MAIN_REQUEST_URL);
        AsynGetSellList.setMETHOD_NAME(METHOD_NAME);
        AsynGetSellList.setNAMESPACE(NAMESPACE);
        AsynGetSellList.setSOAP_ACTION(SOAP_ACTION);
        javab = list.GetSellList(1);

        return javab;
    }

    @Override
    protected void onPreExecute() {
        if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onPreExecute");
        pDialog = new ProgressDialog(SellList.this);
        pDialog.setMessage("Please wait...");
        pDialog.setCancelable(false);
        pDialog.show();
    }

    @Override
    protected void onProgressUpdate(Void... values) {
        if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onProgressUpdate");
    }

    @Override
    protected void onPostExecute(SoapObject javab) {
        if (Constants.DEBUG)Log.i(Constants.LOGTAG, "onPostExecute");
        pDialog.dismiss();
        if (isCancelled()) {
            finish();
        }
        if (javab!=null){
            fillSells(javab);
        }
    }
}

和包含参数的 GetSellList.java :

        public SoapObject GetSellList(int startRowIndex) {
    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

    // افزودن پارامترهای فراخوانی
    request.addProperty("userName", "01395175");
    request.addProperty("password", "123123");
    request.addProperty("startRowIndex", "1");
    request.addProperty("maximumRows", "50");
    request.addProperty("OrderType", "1");
    request.addProperty("IdOpera", "50");

    if (Constants.DEBUG)Log.i(Constants.LOGTAG,"request = "+request);

    //پاکت ساخته شده است
    SoapSerializationEnvelope envelope = getSoapSerializationEnvelope(request);
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = getHttpTransportSE(MAIN_REQUEST_URL);

    SoapObject javab = null;
    try {
        if (Constants.DEBUG)Log.i(Constants.LOGTAG,"envelope = "+envelope);
        //فراخوانی وب سرویس با پاکت
        androidHttpTransport.call(SOAP_ACTION, envelope);

        //دریافت پاسخ از وب سرویس           
//      SoapObject result = (SoapObject)envelope.getResponse();
        Object result0 = (Object)envelope.getResponse();
        if (Constants.DEBUG)Log.i(Constants.LOGTAG,"result0 = "+result0);

        SoapObject result = (SoapObject)result0;

        if (Constants.DEBUG)Log.i(Constants.LOGTAG,"result = "+result);

        javab = findTable(result);
    } catch (Exception e) {
        if (Constants.DEBUG)Log.i(Constants.LOGTAG,"Exception = "+e);
        if (Constants.DEBUG)Log.i(Constants.LOGTAG,"Exception = "+e.getMessage());
        e.printStackTrace();
    }
    return javab;
}

需要的其他代码部分:

        public PropertyInfo addParam(String name, Object value) {
        PropertyInfo propertyInfo = new PropertyInfo();
        propertyInfo.name = name;
        propertyInfo.type = value == null ? PropertyInfo.OBJECT_CLASS : value.getClass();
        propertyInfo.setValue(value);
        return propertyInfo;
    }

    private final static SoapSerializationEnvelope getSoapSerializationEnvelope(SoapObject request) {
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.implicitTypes = true;
        envelope.setAddAdornments(false);
        envelope.setOutputSoapObject(request);   
        return envelope;
    }

我在 logcat 中检查发送参数时看到的内容:

TestParams{userName=01395175; password=password; ...}

但问题是:result0 = - - - - - 这意味着(对我来说)网络服务没有收到参数。 我已经测试了很多方法,但是你有足够的经验知道什么是问题吗?让我先告诉你,检查网站并改变了很多方式,所以如果你看到或遇到同样的问题,请告诉我......谢谢。

【问题讨论】:

  • 几周前我遇到了这个问题。您的参数用户名、密码、startRowIndex 等名称是否与您的 Web 服务中的参数完全相同(包括大写字母)?那是我的问题,当我的网络服务需要参数“userName”时,我将用户名传递给参数“username”。

标签: java web-services android-asynctask ksoap propertyinfo


【解决方案1】:

问题解决了,但是如何解决?这是由于 tempori.org,在我的 Web 服务中用作默认值。我将其更改为我的网站网址并解决了。这真的是非常愚蠢的错误,因为在很多情况下,Web 服务会正确回复,只是当您收到 DataSet 时,您会遇到一个不为人知的错误。经过一天的全职尝试并解决了错误。

blogs.msdn.com/b/endpoint/archive/2011/05/12/how-to-eliminate-tempuri-org-from-your-service-wsdl.aspx

如何从 WCF 服务 WSDL 中删除 tempuri.org 第 1 步:在服务合同中声明命名空间

命名空间可以是任何东西。人们通常使用某种形式的 URI,但它不必指向实际的网页。人们通常会在命名空间中使用版本标识符,但没有关于您应该做什么的规则。

// 从合约中删除 tempuri.org

//如果你不想给我们一个常量,把URI放在这里

// [ServiceContract(Namespace = "http://contoso.com/services")]

[ServiceContract(Namespace = Constants.Namespace)]

公共接口IService1

{

[OperationContract]

void DoWork();

}

第 2 步:在您的服务上声明命名空间

使用 ServiceBehavior 属性添加服务命名空间。使用常量可确保合约和服务的命名空间相同。

//如果你不想给我们一个常量,把URI放在这里

// [ServiceBehavior(Namespace = "http://contoso.com/services")]

[ServiceBehavior(Namespace = Constants.Namespace)]

公共类 Service1 : IService1

{

public void DoWork()

{

}

}

第三步:设置绑定命名空间

<services>

  <service name="EliminateTempUri.Service1">

    <!-- Use a bindingNamespace to eliminate tempuri.org -->

    <endpoint address=""

              binding ="basicHttpBinding" 

              bindingNamespace="http://contoso.com/services"

              contract="EliminateTempUri.IService1"

    />

  </service>

</services>

<behaviors>

  <serviceBehaviors>

    <behavior name="">

      <serviceMetadata httpGetEnabled="true" />

      <serviceDebug includeExceptionDetailInFaults="false" />

    </behavior>

  </serviceBehaviors>

</behaviors>

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

【讨论】:

    猜你喜欢
    • 2013-01-12
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多