Android 调用WCF实例详解

Android 调用WCF实例

1. 构建服务端程序

using System.ServiceModel;

namespace yournamespace
{
  [ServiceContract(Name = "HelloService", Namespace = "http://www.master.haku")]
  public interface IHello
  {
    [OperationContract]
    string SayHello();
  }
}
namespace YourNameSpace
{
  public class YourService
  {
   public string SayHello(string words)
   {
      return "Hello " + words;
   }
  }
}

2. 构建IIS网站宿主

YourService.svc

<%@ServiceHost Debug="true" Service="YourNameSpace.YourService"%>

  Web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <system.serviceModel>
  <serviceHostingEnvironment>
   <serviceActivations >
    <add relativeAddress="YourService.svc" service="YourNameSpace.YourService"/>
   </serviceActivations >
  </serviceHostingEnvironment >

  <bindings>
   <basicHttpBinding>
    <binding name="BasicHttpBindingCfg" closeTimeout="00:01:00"
      openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
      bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
      maxBufferPoolSize="524288" maxReceivedMessageSize="2147483647"
      messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
      allowCookies="false">
     <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
       maxBytesPerRead="4096" maxNameTableCharCount="16384" />
     <security mode="None">
      <transport clientCredentialType="None" proxyCredentialType="None"
        realm="" />
      <message clientCredentialType="UserName" algorithmSuite="Default" />
     </security>
    </binding>
   </basicHttpBinding>
  </bindings>

  <services>
   <service name="YourNameSpace.YourService" behaviorConfiguration="ServiceBehavior">
    <host>
     <baseAddresses>
      <add baseAddress="http://localhost:59173/YourService"/>
     </baseAddresses>
    </host>
    <endpoint binding="basicHttpBinding" contract="YourNameSpace.你的服务契约接口">
     <identity>
      <dns value="localhost" />
     </identity>
    </endpoint>
   </service>
  </services>

  <behaviors>
   <serviceBehaviors>
    <behavior name="ServiceBehavior">
     <serviceMetadata httpGetEnabled="true" />
     <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>
   </serviceBehaviors>
  </behaviors>
 </system.serviceModel>
 <system.web>
  <compilation debug="true" />
 </system.web>
</configuration>

3. 寄宿服务

把网站发布到web服务器, 指定网站虚拟目录指向该目录

如果你能够访问http://你的IP:端口/虚拟目录/服务.svc

那么,恭喜你,你的服务端成功了!

4. 使用ksoap2调用WCF

去ksoap2官网

http://code.google.com/p/ksoap2-android/ 下载最新jar

 5. 在Eclipse中新建一个Java项目,测试你的服务

新建一个接口, 用于专门读取WCF返回的SoapObject对象

ISoapService


package junit.soap.wcf;

import org.ksoap2.serialization.SoapObject;

public interface ISoapService {
  SoapObject LoadResult();
}

   HelloService


package junit.soap.wcf;

import java.io.IOException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

public class HelloService implements ISoapService {
  private static final String NameSpace = "http://www.master.haku";
  private static final String URL = "http://你的服务器/虚拟目录/你的服务.svc";
  private static final String SOAP_ACTION = "http://www.master.haku/你的服务/SayHello";
  private static final String MethodName = "SayHello";

  private String words;

  public HelloService(String words) {
    this.words = words;
  }

  public SoapObject LoadResult() {
    SoapObject soapObject = new SoapObject(NameSpace, MethodName);
    soapObject.addProperty("words", words);

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // 版本
    envelope.bodyOut = soapObject;
    envelope.dotNet = true;
    envelope.setOutputSoapObject(soapObject);

    HttpTransportSE trans = new HttpTransportSE(URL);
    trans.debug = true; // 使用调试功能

    try {
      trans.call(SOAP_ACTION, envelope);
      System.out.println("Call Successful!");
    } catch (IOException e) {
      System.out.println("IOException");
      e.printStackTrace();
    } catch (XmlPullParserException e) {
      System.out.println("XmlPullParserException");
      e.printStackTrace();
    }

    SoapObject result = (SoapObject) envelope.bodyIn;

    return result;
  }
}

  测试程序

package junit.soap.wcf;

import org.ksoap2.serialization.SoapObject;

public class HelloWcfTest {
  public static void main(String[] args) {
    HelloService service = new HelloService("Master HaKu");
    SoapObject result = service.LoadResult();

    System.out.println("WCF返回的数据是:" + result.getProperty(0));
  }
}

经过测试成功

   运行结果:

Hello Master HaKu

6. Android客户端测试

package david.android.wcf;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import org.ksoap2.serialization.SoapObject;

public class AndroidWcfDemoActivity extends Activity {
  private Button mButton1;
  private TextView text;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    mButton1 = (Button) findViewById(R.id.myButton1);
    text = (TextView) this.findViewById(R.id.show);

    mButton1.setOnClickListener(new Button.OnClickListener() {
      @Override
      public void onClick(View v) {

         HelloService service = new HelloService("Master HaKu");
                SoapObject result = service.LoadResult();

        text.setText("WCF返回的数据是:" + result.getProperty(0));
      }
    });
  }
}

7. 最后运行结果

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Android 动画之ScaleAnimation应用详解

    android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解ScaleAnimation 动画, ScaleAnimation(float fromX, float toX, float fromY, float toY,int pivotXType, float pivotXValue, int pivotYType, flo

  • Android应用开发SharedPreferences存储数据的使用方法

    SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的就是一个key-value(键值对).SharedPreferences常用来存储一些轻量级的数据. 复制代码 代码如下: //实例化SharedPreferences对象(第一步) SharedPreferences mySharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE);

  • android TextView设置中文字体加粗实现方法

    英文设置加粗可以在xml里面设置: 复制代码 代码如下: <SPAN style="FONT-SIZE: 18px">android:textStyle="bold"</SPAN> 英文还可以直接在String文件里面直接这样填写: 复制代码 代码如下: <string name="styled_text">Plain, <b>bold</b>, <i>italic</

  • Android Bitmap详细介绍

    复制代码 代码如下: package com.testbitmapscale; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import com.testbitmapscale.R.drawable; im

  • Android 动画之TranslateAnimation应用详解

    android中提供了4中动画: AlphaAnimation 透明度动画效果 ScaleAnimation 缩放动画效果 TranslateAnimation 位移动画效果 RotateAnimation 旋转动画效果 本节讲解TranslateAnimation动画,TranslateAnimation比较常用,比如QQ,网易新闻菜单条的动画,就可以用TranslateAnimation实现, 通过TranslateAnimation(float fromXDelta, float toXD

  • android客户端从服务器端获取json数据并解析的实现代码

    首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 复制代码 代码如下: /**      * 从指定的URL中获取数组      * @param urlPath      * @return      * @throws Exception      */     public static String readParse(String urlPath) throws Exception {                  ByteArrayOutputSt

  • 解决Android SDK下载和更新失败的方法详解

    最近刚换了电脑,开始搭建Android开发环境的时候,下载SDK总是会出现如下错误: 复制代码 代码如下: Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-1.xml. 说dl-ssl.google.com在大陆被强了,解决方法就是修改C:\Windows\System32\drivers\etc\hosts文件.添加一行: 复制代码 代码如下: 74.125.237.1       dl-s

  • android压力测试命令monkey详解

    一.Monkey 是什么?Monkey 就是SDK中附带的一个工具. 二.Monkey 测试的目的?:该工具用于进行压力测试. 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出现的问题. 三.Monkey 测试的特点?Monkey 测试,所有的事件都是随机产生的,不带任何人的主观性. 四.Monkey 命令详解 1).标准的monkey 命令[adb shell] monkey [options] <eventcount> , 例如:adb shell monkey -

  • android PopupWindow 和 Activity弹出窗口实现方式

    本人小菜一个.目前只见过两种弹出框的实现方式,第一种是最常见的PopupWindow,第二种也就是Activity的方式是前几天才见识过.感觉很霸气哦.没想到,activity也可以做伪窗口. 先贴上最常见的方法,主要讲activity的方法. 一.弹出PopupWindow 复制代码 代码如下: /** * 弹出menu菜单 */ public void menu_press(){ if(!menu_display){ //获取LayoutInflater实例 inflater = (Layo

  • 六款值得推荐的android(安卓)开源框架简介

    1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1)  JSON,图像等的异步下载: (2)  网络请求的排序(scheduling) (3)  网络请求的优先级处理 (4)  缓存 (5)  多级别取消请求 (6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求) 2.android-async-http 项目地址:https://github.com/loopj/android-asyn

  • android listview优化几种写法详细介绍

    这篇文章只是总结下getView里面优化视图的几种写法,就像孔乙己写茴香豆的茴字的几种写法一样,高手勿喷,勿笑,只是拿出来分享,有错误的地方欢迎大家指正,谢谢. listview Aviewthatshowsitemsinaverticallyscrollinglist. 一个显示一个垂直的滚动子项的列表视图在android开发中,使用listview的地方很多,用它来展现数据,成一个垂直的视图.使用listview是一个标准的适配器模式,用数据--,界面--xml以及适配器--adapter,

随机推荐