TOP

Android调用Web服务(一)
2017-10-13 10:12:13 】 浏览:10044
Tags:Android 调用 Web 服务

现在大部分应用程序都把业务逻辑处理,数据调用等功能封装成了服务的形式,应用程序只需要调用这些web服务就好了,在这里就不赘述web服务的优点了。本文总结如何在android中调用Web服务,通过传递基类型和复杂类型对比调用.NET平台发布的WCF服务和WebService服务之间的区别。

0 写在前面

以前都是在.NET平台上conding,使用.NET平台发布服务,然后再在.NET的客户端进行调用,非常的方便,最简单的方式就是添加web服务引用,通过添加web服务引用实现像本地调用那样调用web服务,当然我们也可以采用http-post、http-get和基于soap协议的方式去调用服务。

最近在弄andriod的程序,需要调用web服务器上的数据,服务采用C#写的,并部署在iis服务器上。我们可以像.NET那样调用服务那,利用andriod库自带的HttpPost和HttpGet类来调用Web服务。但是wcf服务发布的一些没有添加WebGet或者WebInvoke特性的服务,都只提供基于Soap协议的服务调用方式。虽然soap协议也是基于Http协议,也可以使用HttpPost类来进行调用,但拼凑soap结构体是比较麻烦,好在Ksoap2包提供了调用web服务的方法,而且还比较好的兼容了.NET平台发布的服务。因此本文总结在Andriod中如何使用Ksoap2来调用.NET平台的服务,通过传递基类型和复杂类型对比调用.NET服务发布的WCF服务和WebService服务之间的区别。本文的末尾提供Ksoap2包的下载。

1 WCF服务

我们在服务中提供两个方法,一个计算整数加法,另一个接受People对象并且返回People信息(string)。

1.1 People的数据契约

[DataContract]
public class People
{
  [DataMember]
  public int Age;
  [DataMember]
  public string Name;
}

2.2 WCF服务契约

[ServiceContract(Name = "JuameService", Namespace = "http://www.juame.edu")]
public interface ITest
{
    [OperationContract]
    int Add(int op1, int op2);

    [OperationContract]
    string PostPeopleInfo(People people);

}

上面的服务契约设置了Namespace特性,该特性重要。在后面的wb服务调用中需要用到。

2.3 WCF服务实现

public class TestService : ITest
{
    public int Add(int op1, int op2)
    {
        return op1 + op2;
    }

    public string PostPeopleInfo(People people)
    {
        return "姓名:"+people.Name+"/"+"年龄"+people.Age;
    }
}

我们需要把服务部署到IIS中去,因此需要添加一个svc文件,把服务实现的代码写在svc文件中,发布后,服务调用的地址就是svc文件的地址。

2.4 服务配置

<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
       <service name="Juame.Service.TestService">
        <endpoint address="" 
 binding="basicHttpBinding"
 contract ="Juame.Service.ITest">          
        </endpoint>
      </service>
    </services>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <!--
 若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。
 在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。
 -->
    <directoryBrowse enabled="true"/>
  </system.webServer>

</configuration>

主要是配置好Service节点和serviceBehaviors就行,服务采用BasicHttpBinding类型。在这里多提一点。BasicHttpBinding是针对于Soap Web Service协议,而webHttpBinding支持web service协议,因此在wcf服务上加上WebGet或WebInvoke特性的必须要使用webHttpBinding类型。

在iis中发布web服务非常简单和部署asp.net网站一样,服务发布成功之后,能访问到svc的地址。

2016_10_6798d44e-3b10-4b21-9b40-66d024199b2f

我们提供的服务,一个是传递基类型(string,int,float等),另外一个是传递对象(复杂类型)。

2 Android调用WCF服务

2.1 android布局

界面布局非常简单,两个Button,一个TextView,按钮分别用来调用两个服务,而TextView用来显示服务调用的结果。

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇WebView的使用及添加进度条 下一篇React-Native 之 FlexBox介绍和使..