天天看點

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官網 

5. 在Eclipse中建立一個Java項目,測試你的服務

  建立一個接口, 用于專門讀取WCF傳回的SoapObject對象

  ISoapService

package junit.soap.wcf;

import org.ksoap2.serialization.SoapObject;

public interface ISoapService {

    SoapObject LoadResult();

   HelloService

import java.io.IOException;

import org.ksoap2.SoapEnvelope;

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");

        }

        SoapObject result = (SoapObject) envelope.bodyIn;

        return result;

  測試程式

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;

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. 最後運作結果

Android調用WCF

繼續閱讀