当前位置:编程学习 > wap >>

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

初学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开发,谢谢大家帮忙。 --------------------编程问答--------------------   <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
    
<uses-permission android:name="android.permission.INTERNET"/>
也加了访问权限了。 --------------------编程问答-------------------- 别光看e.getMessage()这个消息
这个消息报null的时候情况比较多
建议看看e这个错误对象,看一下每个属性,里面还有有用的信息。 --------------------编程问答-------------------- 最近我也遇到了差不多的问题,想试试调用.net的webservice的接口,和你的代码基本差不多,
我的问题是导入不同的ksoap2 jar包 报的错还不一样。。。
要是楼主先解决了 通知一声啊 --------------------编程问答-------------------- 看了下ksoap2的官网,说现在只支持java1.3不知道是不是这个问题,我是java1.7说啥也调不出来 --------------------编程问答-------------------- 我搞定了,安卓4.0以后,主线程不能访问网络,你再开个线程调webservice就好使了
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,