【问题标题】:Web service recieves null parameters from application using ksoap methodWeb 服务使用 ksoap 方法从应用程序接收空参数
【发布时间】:2011-03-04 01:18:22
【问题描述】:

我见过讨论这个问题的话题,但似乎没有人发布解决方案。目前,我正在测试将参数传递给我的 .Net Web 服务。当参数到达 Web 服务时,它会添加一个附加字符串,然后我的应用程序也将其返回;但我返回的只是字符串消息,而不是我传递的参数。我的 Web 服务或我的 soap 方法有问题吗?

肥皂:

SoapObject 请求 = new SoapObject(NAMESPACE, METHOD_NAME);

    request.addProperty("A", "workowr");


    SoapSerializationEnvelope envelope =
        new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.dotNet = true;
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);    
        try {
            androidHttpTransport.call(SOAP_ACTION, envelope);
            SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
            //SoapObject result = (SoapObject)envelope.getResponse();       
            String resultData = result.toString();
            testTV.setText(resultData);

        }
        catch(Exception e)
        {
            testTV.setText(e.getMessage());
        }

这是我的简单 .Net 网络服务:

公共函数 getRegInfo(ByVal A As String) As String

返回 A + "字符串消息"

结束函数

我将不胜感激。

【问题讨论】:

  • 你曾经解决过这个问题吗?我对 android 和 ksoap2 有同样的问题

标签: .net android web-services ksoap


【解决方案1】:

对我有用的是在我的 .Net Web 服务和我的应用程序中更改命名空间 URL。

例如,我有:

http://www.example.com/webservices/

我改成:

“example.com/webservices/”

而且效果很好。

试一试。

【讨论】:

    【解决方案2】:

    是的 - 在通过 KSoap 连接时,在 web 服务命名空间中有冒号 (:) 似乎存在一些问题。常规的非参数调用工作正常,但由于某种原因参数似乎为 null。

    【讨论】:

      【解决方案3】:

      实际上不需要在末尾多加“/”。

      在调试并尝试了网上写的任何东西之后,我发现传递参数时最重要的是在您的 WebService-declaration 和 ksoap2 中具有相同的语句。

      所以在两个地方都使用“/”或从两个地方删除它。 “http://”也可以使用。

      【讨论】:

        【解决方案4】:

        添加参数的完美代码 这个作品试试这个

               SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE, OPERATION_NAME);
        
            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.setOutputSoapObject(request);
            envelope.dotNet = true;
            PropertyInfo pi = new PropertyInfo();
            pi.setName("ProcName");
            pi.setValue(a);
            pi.setType(int.class);
            request.addProperty(pi);
            pi=new PropertyInfo();
            pi.setName("UserName");
            pi.setValue(b);
            pi.setType(String.class);
            request.addProperty(pi);
        
            pi=new PropertyInfo();
            pi.setName("Password");
            pi.setValue(c);
            pi.setType(String.class);
            request.addProperty(pi);
        
            pi=new PropertyInfo();
            pi.setName("Paras");
            pi.setValue(d);
            pi.setType(String.class);
            request.addProperty(pi);
        
        
            Object response = null;
        
            HttpTransportSE androidHttpTransport = new HttpTransportSE(SOAP_ADDRESS);
        
            try {
                androidHttpTransport.call(SOAP_ACTION, envelope);
                response = envelope.getResponse();
            } catch (final Exception e) {
                String error = "no";
            }
            return response.toString();
        }
        

        【讨论】:

          【解决方案5】:

          您必须复制和过去的名称空间和肥皂操作与它们在 WSDL xml 文件中出现的完全相同。

          当我从(命名空间和肥皂动作)中删除 http:// 时,我遇到了同样的问题 问题已解决。(在 WSDL 中它们没有 http://) 实际上我尝试访问本地网络服务(安装在本地服务器中的服务)

          但是我有另一个访问外部 .NET Web 服务的应用程序 (央行网络服务获取汇率) WSDL 命名空间和 SoapAction 包含 http:// 我的应用程序运行良好,无需删除 http://

          【讨论】:

            猜你喜欢
            • 2016-12-20
            • 2011-11-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多