You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android Studio项目中添加ASMX类以接入SOAP Web服务

在Android Studio中实现SOAP Web服务连接(替代Xamarin的服务引用功能)

嘿,我完全懂你那种“怎么这么麻烦”的感受!Xamarin右键加服务引用的一键生成确实太丝滑了,但Android Studio这边确实没有直接对应的内置功能。不过别慌,咱们有两种靠谱的方法来搞定SOAP服务调用,实现和SQL Server的交互:

方法一:使用kSOAP2库手动编写SOAP请求

这是Android开发中处理SOAP服务最常用的方案,灵活性很高。

步骤1:添加依赖

打开你的模块级build.gradle文件(通常是app/build.gradle),在dependencies块里添加kSOAP2的依赖:

implementation 'com.google.code.ksoap2-android:ksoap2-android:3.6.4'

同步Gradle让依赖生效。

步骤2:编写SOAP调用代码

你需要手动构造SOAP请求、发送请求并解析响应。举个简单的示例:

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

// 定义SOAP相关常量
private static final String NAMESPACE = "http://your-service-namespace.com/";
private static final String METHOD_NAME = "YourServiceMethod";
private static final String SOAP_ACTION = NAMESPACE + METHOD_NAME;
private static final String URL = "http://your-service-url/YourService.asmx";

// 在子线程中执行网络请求(Android不允许主线程做网络操作)
new Thread(() -> {
    try {
        // 创建SOAP请求对象
        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
        // 添加请求参数(如果你的服务需要的话)
        request.addProperty("ParamName", "ParamValue");

        // 创建SOAP信封
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        envelope.setOutputSoapObject(request);
        envelope.dotNet = true; // 如果是.NET的SOAP服务(比如SQL Server的ASMX服务),一定要设为true

        // 发送请求
        HttpTransportSE transport = new HttpTransportSE(URL);
        transport.call(SOAP_ACTION, envelope);

        // 解析响应
        SoapObject response = (SoapObject) envelope.getResponse();
        String result = response.getProperty("ResultProperty").toString();

        // 回到主线程更新UI(如果需要的话)
        runOnUiThread(() -> {
            // 处理结果
        });

    } catch (Exception e) {
        e.printStackTrace();
    }
}).start();

方法二:用WSDL生成工具自动生成客户端代码

如果你的SOAP服务有WSDL文件,你可以用工具把WSDL转换成Java客户端类,类似Xamarin的服务引用效果。

步骤1:获取WSDL文件

访问你的SOAP服务URL,比如http://your-service-url/YourService.asmx?WSDL,把页面内容保存成.wsdl文件。

步骤2:用wsdl2java生成代码

可以用Apache Axis2的wsdl2java工具,或者JAX-WS的wsimport工具。这里以Axis2为例:

  1. 下载Axis2的二进制包,解压后找到bin/wsdl2java.bat(Windows)或bin/wsdl2java.sh(Linux/Mac)。
  2. 打开命令行,运行以下命令:
wsdl2java -uri path/to/your/service.wsdl -p com.your.app.soapclient -d adb -s
  • -uri:指定你的WSDL文件路径
  • -p:指定生成类的包名
  • -d adb:生成Android兼容的代码
  • -s:生成同步调用的代码(也可以用异步)

步骤3:导入生成的代码到项目

把生成的所有Java文件复制到你的Android项目的src/main/java/com/your/app/soapclient目录下,然后就可以像调用普通Java类一样使用SOAP服务了:

// 创建服务客户端实例
YourServiceStub stub = new YourServiceStub();
// 设置服务地址(如果需要的话)
stub._getServiceClient().getOptions().setTo(new EndpointReference(URL));

// 构造请求参数
YourServiceStub.YourMethodRequest request = new YourServiceStub.YourMethodRequest();
request.setParamName("ParamValue");

// 调用服务
YourServiceStub.YourMethodResponse response = stub.yourMethod(request);
String result = response.getResult();

必加的配置

  • 网络权限:在AndroidManifest.xml里添加互联网权限:
<uses-permission android:name="android.permission.INTERNET" />
  • 明文HTTP处理(Android 9+):如果你的SOAP服务用的是HTTP而不是HTTPS,需要在res/xml下创建network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

然后在AndroidManifest.xml的<application>标签里引用:

android:networkSecurityConfig="@xml/network_security_config"

内容的提问来源于stack exchange,提问作者Mostafa Azadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:54:22