ksoap2 调用 .net webservice 问题【高分】

buttonzhou 2013-08-22 10:40:10
初学android开发,谢谢大家帮忙。
贴上代码:
c# webservice:

using System;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml.Linq;

[WebService(Namespace = "http://tempuri.org/")]
[SoapRpcService]//指定使用rpc方式
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//[System.ComponentModel.ToolboxItem(false)]

// 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
//[System.Web.Script.Services.ScriptService]
public class Service : System.Web.Services.WebService
{
public Service () {

//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}

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

[WebMethod]
public string TestOne(string str1)
{
return "Test" + str1;
}

}
备注:发布后,手机连数据线,能根据IP地址使用浏览器访问web服务;

客户端代码:
package com.example.webservicetest;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.ksoap2.serialization.*;

public class MainActivity extends Activity {

private EditText userName;
private EditText userPass;
private Button btnLogin;
private Button btnClose;
private TextView tv;

final String SOAP_ACTION = "http://tempuri.org/HelloWorld";
private static final String METHOD_NAME = "HelloWorld";
private static final String NAMESPACE = "http://tempuri.org/";
private static final String URL = "http://192.168.0.113/TestServer/Service.asmx?WSDL";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);


btnLogin = (Button) findViewById(R.id.button1);
btnClose = (Button) findViewById(R.id.button2);
userName = (EditText) findViewById(R.id.edit1);
userPass = (EditText) findViewById(R.id.edit2);
tv = (TextView)findViewById(R.id.tv);

btnLogin.setOnClickListener(new myClick());

}


private class myClick implements OnClickListener {

@Override
public void onClick(View v)
{
try
{

//调用.net 的WebService.
//设置连接参数
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
//增加属性参数。 将相关的函数参数放入到过程中。
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);//soap协议版本必须用SoapEnvelope.VER11(Soap V1.1);
//注意:这个属性是对dotnetwebservice协议的支持,如果dotnet的webservice 不指定rpc方式则用true否则要用false
envelope.dotNet = true;
//envelope.setOutputSoapObject(request);//设置请求参数
envelope.bodyOut=request; //enveloper.bodyOut=request 与 envelope.setOutputSoapObject(request) 效果相同。
//step4 创建HttpTransportSE对象
HttpTransportSE ht = new HttpTransportSE(URL);
//step5 调用WebService
ht.call(SOAP_ACTION, envelope); //关键的一步,很多问题都在这一步调试时出现问题。要么是IIS有问题,要么是ksoap2相关参数没配置好。
if(envelope.getResponse()!=null){
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();

String result =response.toString() ;
if (result != null)
{
tv.setText(result);
}
else
{
tv.setText("登录失败!");
}
}
else {
tv.setText("服务器可能没有开启!");
}


} catch (Exception e)
{
// TODO: handle exception
e.printStackTrace();
tv.setText("异常了,原因:" + e.getMessage());
}

}
}
}
备注:客户端访问WEB服务是网上参考的,执行到: ht.call(SOAP_ACTION, envelope); 转入catch,,而且e.getMessage()获取的值为null

初学android开发,谢谢大家帮忙。
...全文
194 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
kurorolove 2013-10-20
  • 打赏
  • 举报
回复
我搞定了,安卓4.0以后,主线程不能访问网络,你再开个线程调webservice就好使了
kurorolove 2013-10-19
  • 打赏
  • 举报
回复
看了下ksoap2的官网,说现在只支持java1.3不知道是不是这个问题,我是java1.7说啥也调不出来
danielinbiti 2013-08-30
  • 打赏
  • 举报
回复
别光看e.getMessage()这个消息 这个消息报null的时候情况比较多 建议看看e这个错误对象,看一下每个属性,里面还有有用的信息。
  • 打赏
  • 举报
回复
最近我也遇到了差不多的问题,想试试调用.net的webservice的接口,和你的代码基本差不多, 我的问题是导入不同的ksoap2 jar包 报的错还不一样。。。 要是楼主先解决了 通知一声啊
buttonzhou 2013-08-22
  • 打赏
  • 举报
回复
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET"/> 也加了访问权限了。

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧