您的位置:首页 > 其它

通过ksoap2访问donet webservice

2011-03-10 09:04 363 查看
通过2天的摸索,从一开始用序列化-反序列化方式开始就没成功过,似乎是因为语言不同导致序列化不成功。后来就用RPC方式,可以获取单独对象,但是数组集合的获取没想到合理方式。最后只是简单的修改了下代码,通过Ksoap 的 soapobject 对象获取了集合

下面是服务端代码(webservice)

/// <summary>
/// Service1 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
// [SoapRpcService]//指定使用rpc方式
public class Service1 : System.Web.Services.WebService
{

//  [SoapRpcMethod, WebMethod]//具体方法中也要指定rpc方式
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
// [SoapRpcMethod, WebMethod]//具体方法中也要指定rpc方式
[WebMethod]
public Person GetPerson()
{
Person p = new Person(1,"xzd",34);
return p;
}

// [SoapRpcMethod, WebMethod]//具体方法中也要指定rpc方式
[WebMethod]
public Person SetPerson(string name,int age)
{
Person p = new Person(1, name, age);
return p;
}

[WebMethod]   //[SoapRpcMethod, WebMethod] 具体方法中也要指定rpc方式
public List<Person> GetPersonlist()
{
return PersonManager.GetPersonlist();
}
}


下面是客户端代码

TextView tvResult ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

SoapObject request = new SoapObject("http://tempuri.org/", "GetPersonlist");

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);

envelope.dotNet = true;
envelope.setOutputSoapObject(request);
AndroidHttpTransport  ht = new AndroidHttpTransport("http://192.168.1.101/Service/Service1.asmx");

(new MarshalBase64()).register(envelope);//放着没错

tvResult = (TextView)findViewById(R.string.hello);
try {

ht.call("http://tempuri.org/GetPersonlist",envelope);

SoapObject soapObject = (SoapObject) envelope.getResponse();
String names="";
if(soapObject.getName()=="anyType")
{
for(int i=0;i<soapObject.getPropertyCount();i++)
{

SoapObject soapChilds =(SoapObject)soapObject.getProperty(i);

names+= soapChilds.getProperty("Name").toString()+","+
soapChilds.getProperty("Id").toString()+","+
soapChilds.getProperty("Age").toString();

}
}
tvResult.setText(names);

} catch (Exception e) {
// TODO Auto-generated catch block

tvResult.setText(e.getMessage().toString());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: