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. 最后运行结果

 

 

 

时间: 2024-09-28 10:46:10

Android调用WCF的相关文章

android 调用wcf,byte[] Cannot serialize

问题描述 android 调用wcf,byte[] Cannot serialize public class UpLoadService implements ISoapService { private static final String NameSpace = "http://tempuri.org/"; private static final String URL = "http://www.xxx.com/PhotoUp.svc"; private

Android 调用WCF实例详解_Android

Android 调用WCF实例 1. 构建服务端程序 using System.ServiceModel; namespace yournamespace { [ServiceContract(Name = "HelloService", Namespace = "http://www.master.haku")] public interface IHello { [OperationContract] string SayHello(); } } namespa

Android 调用WCF实例详解

Android 调用WCF实例 1. 构建服务端程序 using System.ServiceModel; namespace yournamespace { [ServiceContract(Name = "HelloService", Namespace = "http://www.master.haku")] public interface IHello { [OperationContract] string SayHello(); } } namespa

Delphi调用WCF异构编程

Delphi调用WCF异构编程                    老帅 一.项目背景       几年前,就开始使用Delphi进行分布式开发,最早用的方案是Delphi7+Webservice,在简单的应用场景下,也能够满足需求了.       喜欢博主的博文,请投出您宝贵的一票,支持一下博主评选博客之星.       http://vote.blog.csdn.net/blogstaritem/blogstar2013/shuaihj         目前有一个项目,主要的需求点如下:

wcf-Android用ksoap2调用WCF的问题,详细如代码。

问题描述 Android用ksoap2调用WCF的问题,详细如代码. 用Java和WCF框架实现了一个Webservice,在浏览器中输入http://localhost:9999/cat?wsdl 得到: //--------------------------------------------------/wsdl:import /wsdl:input /wsdl:output/wsdl:operation /wsdl:input /wsdl:output/wsdl:operation/w

Winform 调用WCF客户端,所有服务端方法在运行的时候均找不到(编译没有问题)

  今天在开发过程中遇到了一个很恶心的问题,就是Form窗体ShowDialog的时候,直接报出下面的错误: 有关调用实时(JIT)调试而不是此对话框的详细信息, 请参见此消息的结尾. ************** 异常文本 ************** System.MissingMethodException: 找不到方法:"XXX.XXX.DataObject.SPI.DataObjectColumn[] XXX.XXX.WCFClient.WCFService.ServiceClient

ExtJS调用WCF系列

第三节:ExtJS调用WCF系列-----添加,修改,删除(2) 第三节:ExtJS调用WCF系列-----添加,修改,删除(1) 第二节:ExtJS调用WCF系列-----分页排序列表实现 第一节:ExtJS调用WCF系列-----实现JSON传递

第二节:ExtJS调用WCF系列-----分页排序列表实现

打开第一节中的那个项目,新建一个Paging.aspx的页面来实现分页列表. 这次我们使用一个测试的数据库CompanyInfoDB,里面有两张表,部门和员工,并外键关联,数据库调用采用Linq的Sqlmetal 命令方式,在Visual Studio 2008的命令提示符中输入以下命令:D:\Program Files\Microsoft Visual Studio 9.0\VC>sqlmetal /conn:server=172.16.1.52;database=CompanyInfoDB;

如何实现 Android 调用基于 IBM i 的 Web 服务

实现 Android 调用基于 IBM i 的 Web 服务 作为 Internet 异构环境下的互操作技术,Web 服务被广泛应用.由于 Web 服务具有跨语言.跨平台等特点,我们可以通过 Android 等智能设备,以 Web 服务的方式重用 IBM i 服务器端的 RPG.COBOL 等业务程序.本文的主要目标是,结合 IBM i 支持的 Web 服务组件,指导读者如何编写基于 Android 的 Web 服务客户端程序,调用 IBM i 服务器端的 Web 服务. 从结构上,本文主要分为