当前位置: 首页 > 知识库问答 >
问题:

使用KSOAP从android应用程序调用asmx Web服务

益光亮
2023-03-14

我正在尝试向asmx soap web服务发送一些数据,一直在尝试,但确实成功发送了。我得到的错误是:

08-13 20:51:12.571:带系统。err(8885):SoapFault-faultcode:“soap:Server”faultstring:“服务器无法处理请求---

以下是web服务URL:http://87.248.129.182:8090/PostPhotoInfo.asmx

以及代码:

private final String NAMESPACE = "http://tempuri.org/";
private final String URL = "http://87.248.129.182:8090/PostPhotoInfo.asmx";
private final String SOAP_ACTION = "http://tempuri.org/PostPhotoInfo";
private final String METHOD_NAME = "PostPhotoInfo";


    public void call_asmx() {
        //Create request
        // photoArray
        SoapObject request = new SoapObject(URL, METHOD_NAME);
        //SoapObject request2 = new SoapObject(NAMESPACE, "photoArray");
        SoapObject IMG = new SoapObject(URL, "PhotoInfo");


        PropertyInfo _date = new PropertyInfo();
        _date.setName("Date");
        _date.setValue("2016-08-12 15:45:00");
        _date.setType(String.class);


        PropertyInfo _Latitude = new PropertyInfo();
        _Latitude.setName("Latitude");
        _Latitude.setValue("12.5245123");
        _Latitude.setType(double.class);


        PropertyInfo _longtitude = new PropertyInfo();
        _longtitude.setName("Longitude");
        _longtitude.setValue("32.45345");
        _longtitude.setType(double.class);


        PropertyInfo _CardID = new PropertyInfo();
        _CardID.setName("CardID");
        _CardID.setValue(14);
        _CardID.setType(int.class);


        PropertyInfo _ParkingNo = new PropertyInfo();
        _ParkingNo.setName("ParkingNo");
        _ParkingNo.setValue(12);
        _ParkingNo.setType(int.class);

        PropertyInfo _Image = new PropertyInfo();
        _Image.setName("Image");
        _Image.setValue("<< IMAGE DATA >>>");
        _Image.setType(Base64.class);



        IMG.addProperty(_date);
        IMG.addProperty(_Latitude);
        IMG.addProperty(_longtitude);
        IMG.addProperty(_CardID);
        IMG.addProperty(_ParkingNo);
        IMG.addProperty(_Image);


        request.addSoapObject(IMG);

        //Create envelope
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER11);
        envelope.dotNet = true;
        //Set output SOAP object
        envelope.setOutputSoapObject(request);
        //Create HTTP call object
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);








        try {
            //Invole web service
            androidHttpTransport.call(SOAP_ACTION, envelope);
            //Get the response
            SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
            //Assign it to fahren static variable
            fahren = response.toString();

        } catch (Exception e) {
            e.printStackTrace();
            //Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
        }
    }  

任何提示都将不胜感激。

共有1个答案

谢修真
2023-03-14

代码未设置NAMESPACE并且未添加photoArray

尝试以下代码:

private void callWebservice() {
    String NAMESPACE = "http://tempuri.org/";
    String URL = "http://87.248.129.182:8090/PostPhotoInfo.asmx";
    String SOAP_ACTION = "http://tempuri.org/PostPhotoInfo";
    String METHOD_NAME = "PostPhotoInfo";

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    SoapObject photoArray = new SoapObject("", "photoArray");
    SoapObject photoInfo = new SoapObject("", "PhotoInfo");

    PropertyInfo date = new PropertyInfo();
    date.setName("Date");
    date.setValue("2016-08-12 15:45:00");
    date.setType(String.class);

    PropertyInfo latitude = new PropertyInfo();
    latitude.setName("Latitude");
    latitude.setValue("12.5245123");
    latitude.setType(String.class);

    PropertyInfo longtitude = new PropertyInfo();
    longtitude.setName("Longitude");
    longtitude.setValue("32.45345");
    longtitude.setType(String.class);

    PropertyInfo cardID = new PropertyInfo();
    cardID.setName("CardID");
    cardID.setValue("18");
    cardID.setType(String.class);

    PropertyInfo parkingNo = new PropertyInfo();
    parkingNo.setName("ParkingNo");
    parkingNo.setValue("20");
    parkingNo.setType(String.class);

    PropertyInfo image = new PropertyInfo();
    image.setName("Image");
    image.setValue("<Base64 String>");
    image.setType(String.class);

    photoInfo.addProperty(date);
    photoInfo.addProperty(latitude);
    photoInfo.addProperty(longtitude);
    photoInfo.addProperty(cardID);
    photoInfo.addProperty(parkingNo);
    photoInfo.addProperty(image);

    photoArray.addSoapObject(photoInfo);
    request.addSoapObject(photoArray);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.setAddAdornments(false);
    envelope.dotNet = true;
    envelope.implicitTypes = true;

    envelope.setOutputSoapObject(request);

    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);

        SoapObject response = (SoapObject) envelope.getResponse();
        String value = response.toString();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
 类似资料:
  • 我在visual studio中创建了一个dll(我没有使用任何win\u API函数)。我想从我生成的android.apk文件中调用这个dlll,但在运行这个文件时,我遇到了这个错误。 "java.lang.无法从加载器加载Testdll1dalvik.system.PathClassLoader[DexPathList[[zip file"/data/app/], nativeLibrary

  • 问题内容: 我正在构建一个将从命令行调用的Spring Boot应用程序。我将一些参数传递给应用程序,但是在从此类中调用服务时遇到问题: 我正在尝试从内部调用方法,但出现错误: 问题答案: 您可以创建一个实现CommandLineRunner的类,并在应用启动后调用该类 您可以在这里获得更多信息

  • 问题内容: 我在Android应用中使用Twitter的Fabric SDK 。我需要获取Twitter用户的推文和状态消息。我还没有找到任何示例,有关此文档的说明也不太清楚,所以我提出了一个新问题。有人可以提供如何使用该类的示例吗? 问题答案: Twitter Kit可以进行API调用。官方文档在这里:https : //dev.twitter.com/twitter- kit/android/

  • 问题内容: 我想从Java应用程序调用Servlet。问题是,该调用似乎未到达Servlet。我没有收到任何错误,但是没有到达Servlet中的第一个输出“ doPost”。如果我在Web浏览器中打开URL,我当然会得到如下错误:不支持GET等。但是至少我知道发生了一些错误。 我使用以下代码(ActionPackage类仅包含一个Vector参数,并且可序列化): Java应用程序: Servle

  • 我不知道是怎么回事?? 任何人都可以提供一个数据通道的工作示例,将非常感谢。

  • 我有一个通过ClickOnce (VS 2012)部署到文件共享的windows应用程序。它被配置为一个在线应用程序(没有安装在客户端)。我可以通过客户机运行这个应用程序,只需指向文件共享并双击该文件。我遇到的问题是在客户端(客户端实际上是一个服务器,Windows Server 2008)上运行这个任务。但是,如果我创建一个调用ClickOnce应用程序的批处理文件,任务计划程序可以成功调用该批