Android调用WCF服务

文章目录

本篇博客是Android调用WCF服务的简单实例。

实例

本例以简单的一个创建通知的WCF接口为例讲述Android与WCF的交互。
首先可使用WcfTestClient测试下WCF接口的CreateNotice方法,可参照上篇Java调用WCF的博客。
新建WCFService调用WCF的工具类如下

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
package com.carlos.wcf;

import android.os.Handler;import android.os.Message;

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

import java.io.IOException;import java.util.Iterator;import java.util.Map;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;

 * 访问WCF工具类 * Created by carlos on 2015/11/28. */public class  {    public static final String WCF_URL="";//引号类改为自己的    public static final String NAMESPACE="";//引号类改为自己的    public static final String SOAP="";//引号类改为自己的    private static final ExecutorService executorService= Executors.newFixedThreadPool(3);

     * 调用WCF方法     * @param methodName     * @param properties     * @param wcfServiceCallBack     */    public static void callWCFService(final String methodName,Map properties, final WCFServiceCallBack                                 wcfServiceCallBack){        // 创建HttpTransportSE对象,传递WCFService服务器地址        final HttpTransportSE httpTransportSE=new HttpTransportSE(WCF_URL);        SoapObject soapObject=new SoapObject(NAMESPACE,methodName);        if(properties!=null){            for(Iterator<Map.Entry<String,Object>> it=properties.entrySet().iterator();it.hasNext();){                Map.Entry<String,Object> entry=it.next();                soapObject.addProperty(entry.getKey(),entry.getValue());            }        }

        // 实例化SoapSerializationEnvelope,传入WebService的SOAP协议的版本号        final SoapSerializationEnvelope soapEnvelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);        soapEnvelope.bodyOut=soapObject;        // 设置是否调用的是.Net开发的WCFService        soapEnvelope.setOutputSoapObject(soapObject);        soapEnvelope.dotNet=true;        httpTransportSE.debug=true;

        // 用于子线程与主线程通信的Handler        final Handler mHandler=new Handler(){

            public void handleMessage(Message msg) {                super.handleMessage(msg);                // 将返回值回调到callBack的参数中                wcfServiceCallBack.callBack((SoapObject) msg.obj);            }        };        // 开启线程去访问WCFService        executorService.submit(new Runnable() {

            public void run() {                SoapObject resultSoapObject=null;                try {                    httpTransportSE.call(SOAP+methodName,soapEnvelope);                    if(soapEnvelope.getResponse()!=null){                        resultSoapObject= (SoapObject) soapEnvelope.bodyIn;                    }                } catch (IOException e) {                    e.printStackTrace();                } catch (XmlPullParserException e) {                    e.printStackTrace();                }finally {                    // 将获取的消息利用Handler发送到主线程                    mHandler.sendMessage(mHandler.obtainMessage(0,resultSoapObject));                }            }        });    }

     * 回调接口     */    public interface WCFServiceCallBack{        public void callBack(SoapObject result);    }}

MainActivity类里面调用该方法打印出返回的WCF结果

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
package com.carlos.wcf;

import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;

import org.ksoap2.serialization.SoapObject;

import java.util.HashMap;

public class MainActivity extends AppCompatActivity {

    private Button b_get_WCFResult;    private final static String TAG="WCFResult";

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

        b_get_WCFResult= (Button) findViewById(R.id.b_get_WCFResult);

        b_get_WCFResult.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {                getWCFResult();            }        });

    }

    private void getWCFResult(){        HashMap<String,Object> map=new HashMap<>();        map.put("title", "提醒");        map.put("content", "晚上写篇博客");        WCFService.callWCFService("CreateNotice", map, new WCFService.WCFServiceCallBack() {

            public void callBack(SoapObject result) {                if(result!=null){                    Toast.makeText(MainActivity.this,result.toString(),Toast.LENGTH_SHORT).show();                    Log.i(TAG, result.toString());

                    SoapObject soapObject=(SoapObject)result.getProperty("result");                    Log.i(TAG,soapObject.toString());                    if(soapObject.toString().equals("anyType{}")){                        Log.i(TAG,"没有结果");                    }else{                        for(int i=0;i<soapObject.getPropertyCount();i++){                            Log.i("WCFResult",soapObject.getProperty(i).toString());                        }                    }

                }            }        });    }}

点击获取WCF结果的按钮后控制台输出的结果

原文:大专栏  Android调用WCF服务

原文地址:https://www.cnblogs.com/petewell/p/11607171.html

时间: 2024-10-13 22:32:42

Android调用WCF服务的相关文章

Android基于ksoap2调用WCF服务(二):Android篇

上一篇通过一个非常简单的例子,完成了一个WCF的服务.接下来介绍一下Android端. Android端调用WCF,采用基于ksoap2包来实现. 下载地址(这个需要fan qiang访问,你们懂的):https://code.google.com/p/ksoap2-android/ 我用的3.3.0版本,我传到csdn上,上面地址如果不能访问,可以用这个地址:http://download.csdn.net/detail/cnryc/7695437 程序的源代码下载地址:http://down

Android 调用WCF实例详解

Android 调用WCF实例 1. 构建服务端程序 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 using System.ServiceModel; namespace yournamespace {   [ServiceContract(Name = "HelloService", Namespace = "http://www.master.haku")]   public interface IHello   {     [Operati

【ITOO】WCF——Client调用WCF服务

三步走已经走了两步,一个WCF服务发布好之后,就等待着用的人来调用了,它只向外提供一个接口,暴露地址和契约,不暴露服务是如何实现的.接下来就说说客户端调用WCF服务的事. 其实说到调用就很简单了,首先我们要让我们所需的服务识别我们,即配置好同样的终结点信息,然后添加服务的引用,最后调用相应的方法即可. 如配置文件中: <applicationSettings> <WebDemoClient.Properties.Settings> <setting name="We

WPF异步调用WCF服务

wpf调用wcf时,第一次访问总耗时到达几秒,影响界面的用户体验,因此在wpf加载界面和加载数据时采用异步加载,即异步访问wcf服务, 由于是否采用异步加载和服务端无关,仅仅由客户端自己根据需要来选择,则我们只需要在客户端(WPF)程序中采用异步的方法.如下: //1.创建一个异步对象,访问wcfFunc<string, string, List<NodeItem>> GetDataFromWCF = new Func<string, string, List<Node

实现在GET请求下调用WCF服务时传递对象(复合类型)参数

WCF实现RESETFUL架构很容易,说白了,就是使WCF能够响应HTTP请求并返回所需的资源,如果有人不知道如何实现WCF支持HTTP请求的,可参见我之前的文章<实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法>.<实现jquery.ajax及原生的XMLHttpRequest跨域调用WCF服务的方法>,在此就不作重述. 实现WCF支持HTTP请求调用容易,但要实现类似MVC的ACTION及WEB API那样的灵活,那就得花费点功夫,为什么这样说

Silverlight客户端调用WCF服务难题解疑

Silverlight客户端调用WCF服务在实际使用中经常会出现的问题就是无法直接应用类文件和配置文件.微软针对这一情况已经给出了解决办法.WCF开发框架可以帮助我们实现可靠性较高的跨平台解决方案.对于这样一款功能性较强的工具,我们在实际使用中通常也会遇到一些问题.在这里就来了解一下其中Silverlight客户端调用WCF服务的一些难题解疑. WCF服务端做好后,可以通过SVCUTIL.exe工具生成客户端代码和配置文件,这些内容比较简单,在这里就不做详细介绍. 但是,如果使用Silverli

转载——Java与WCF交互(一):Java客户端调用WCF服务

最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参考: 第一步:生成WCF服务 新建WCF解决方案,分别添加三个项目,HelloTimeService(类库),HelloTimehost(控制台程序),HelloTimeClient(控制台程序),项目结构如图:各个项目的主要代码:service: Host: Client: 编译通过后,测试Hos

实现jquery.ajax及原生的XMLHttpRequest调用WCF服务的方法

废话不多说,直接讲解实现步骤 一.首先我们需定义支持WEB HTTP方法调用的WCF服务契约及实现服务契约类(重点关注各attribute),代码如下: //IAddService.cs namespace WcfService1 { [ServiceContract] public interface IAddService { [OperationContract] [WebInvoke(Method="POST",RequestFormat=WebMessageFormat.Js

Android访问WCF服务(使用json实现参数传递)

经过多日努力, 终于勉强弄明白了Android访问WCF服务的方法. 服务端实现 一, 实现服务. 操作契约 [csharp] view plaincopy [ServiceContract] public interface IService { [OperationContract] [WebInvoke( BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, Reque