Android調用RESTful WCF服務

WCF端
接口
[csharp]
[Description("REST服務測試")] 
[ServiceContract] 
public interface IAccountRestService : IRestServiceContract 

    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)] 
    List<Account> GetAccountDataByGet(); 
 
    [WebInvoke(Method = "POST")] 
    List<Account> GetAccountDataByPost(); 
 
    /// <example>調用方式:/SendMessageByGet1?message=aaa&value=3</example> 
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json)] 
    string SendMessageByGet1(string message, int value); 
 
    /// <example>調用方式:/SendMessageByGet/aaa/3</example> 
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "/SendMessageByGet2/{message}/{value}")] 
    string SendMessageByGet2(string message, string value); 
 
    /// <example>調用方式:{"message":"aa","value":3}。另外不要忘瞭在HTTP頭中加入“content-type: text/json content-length: 26”。BodyStyle特性:方法參數若是多個,必須對其進行Json包裝</example> 
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
    string SendMessageByPost1(string message, int value); 

實現
[csharp] 
public class AccountService : IAccountRestService 

    static List<Account> AccountList 
    { 
        get 
        { 
            var list = new List<Account> 
                           { 
                               new Account 
                                   { 
                                       Name = "Bill Gates", 
                                       Address = "YouYi East Road", 
                                       Age = 56, 
                                       Birthday = DateTime.Now 
                                   }, 
                               new Account 
                                   { 
                                       Name = "Steve Paul Jobs", 
                                       Address = "YouYi West Road", 
                                       Age = 57, 
                                       Birthday = DateTime.Now 
                                   }, 
                               new Account 
                                   { 
                                       Name = "John D. Rockefeller", 
                                       Address = "YouYi North Road", 
                                       Age = 65, 
                                       Birthday = DateTime.Now 
                                   } 
                           }; 
            return list; 
        } 
    } 
 
    public List<Account> GetAccountDataByGet() 
    { 
        return AccountList; 
    } 
    public List<Account> GetAccountDataByPost() 
    { 
        return AccountList; 
    } 
    public string SendMessageByGet1(string message, int value) 
    { 
        return DateTime.Now + " GetMessage:" + message + value; 
    } 
    public string SendMessageByGet2(string message, string value) 
    { 
        return DateTime.Now + " GetMessage:" + message + value; 
    } 
    public string SendMessageByPost1(string message, int value) 
    { 
        return DateTime.Now + " PostMessage:" + message + value; 
    } 
 
    #region Implementation of IDisposable 
 
    public void Dispose() 
    { 
    } 
 
    #endregion 

托管配置
[csharp] 
Bindings.Add(new WebHttpBinding 

    CrossDomainScriptAccessEnabled = true 

, new List<IEndpointBehavior> 

    new WebHttpBehavior(), 
}); 

ANDROID端
界面
[html]
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 
 
    <TableLayout 
        android:id="@+id/tableLayout1" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" > 
 
        <TableRow> 
 
            <Button 
                android:id="@+id/btnGetAccountDataByGet" 
                android:text="GetAccountDataByGet" /> 
        </TableRow> 
 
        <TableRow> 
 
            <Button 
                android:id="@+id/btnGetAccountDataByPost" 
                android:text="GetAccountDataByPost" /> 
        </TableRow> 
 
        <TableRow> 
 
            <Button 
                android:id="@+id/btnSendMessageByGet1" 
                android:text="SendMessageByGet1" /> 
        </TableRow> 
 
        <TableRow> 
 
            <Button 
                android:id="@+id/btnSendMessageByGet2" 
                android:text="SendMessageByGet2" /> 
        </TableRow> 
 
        <TableRow> 
 
            <Button 
                android:id="@+id/btnSendMessageByPost1" 
                android:text="SendMessageByPost1" /> 
        </TableRow> 
        </TableLayout> 
 
</RelativeLayout> 

後臺
[java] 
package com.example.testwcf; 
 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.entity.StringEntity; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.protocol.HTTP; 
import org.apache.http.util.EntityUtils; 
import org.json.JSONObject; 
import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.Toast; 
 
public class MainActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
 
        { 
            Button button = (Button) super 
                    .findViewById(R.id.btnGetAccountDataByGet); 
            button.setOnClickListener(new OnClickListener() { 
                @Override 
                public void onClick(View v) { 
                    try { 
                        HttpClient client = new DefaultHttpClient(); 
 
                        HttpGet request = new HttpGet( 
                                "http://10.168.1.102:9999/IAccountRestService/GetAccountDataByGet"); 
 
                        HttpResponse response = client.execute(request); 
 
                        Toast.makeText(MainActivity.this, 
                                EntityUtils.toString(response.getEntity()), 
                                Toast.LENGTH_SHORT).show(); 
                    } catch (Exception e) { 
                        e.printStackTrace(); 
                    } 
                } 
            }); 
        } 
        { 
            Button button = (Button) super 
                    .findViewById(R.id.btnGetAccountDataByPost); 
            button.setOnClickListener(new OnClickListener() { 
                @Override 
                public void onClick(View v) { 
                    try { 
                        HttpClient client = new DefaultHttpClient(); 
 
                        HttpPost request = new HttpPost( 
                                "http://10.168.1.102:9999/IAccountRestService/GetAccountDataByPost"); 
 
                        HttpResponse response = client.execute(request); 
 
                        Toast.makeText(MainActivity.this, 
                                EntityUtils.toString(response.getEntity()), 
                                Toast.LENGTH_SHORT).show(); 
                    } catch (Exception e) { 
                        e.printStackTrace(); 
                    } 
                } 
            }); 
        } 
        { 
            Button button = (Button) super 
                    .findViewById(R.id.btnSendMessageByGet1); 
            button.setOnClickListener(new OnClickListener() { 
                @Override 
                public void onClick(View v) { 
                    try { 
                        HttpClient client = new DefaultHttpClient(); 
 
                        HttpGet request = new HttpGet( 
                                "http://10.168.1.102:9999/IAccountRestService/SendMessageByGet1?message=aaa&value=3"); 
 
                        HttpResponse response = client.execute(request); 
 
                        Toast.makeText(MainActivity.this, 
                                EntityUtils.toString(response.getEntity()), 
                                Toast.LENGTH_SHORT).show(); 
                    } catch (Exception e) { 
                        e.printStackTrace(); 
                    } 
                } 
            }); 
        } 
        { 
            Button button = (Button) super 
                    .findViewById(R.id.btnSendMessageByGet2); 
            button.setOnClickListener(new OnClickListener() { 
                @Override 
                public void onClick(View v) { 
                    try { 
                        HttpClient client = new DefaultHttpClient(); 
 
                        HttpGet request = new HttpGet( 
                                "http://10.168.1.102:9999/IAccountRestService/SendMessageByGet2/bbb/4"); 
 
                        HttpResponse response = client.execute(request); 
 
                        Toast.makeText(MainActivity.this, 
                                EntityUtils.toString(response.getEntity()), 
                                Toast.LENGTH_SHORT).show(); 
                    } catch (Exception e) { 
                        e.printStackTrace(); 
                    } 
                } 
            }); 
        } 
        { 
            Button button = (Button) super 
                    .findViewById(R.id.btnSendMessageByPost1); 
            button.setOnClickListener(new OnClickListener() { 
                @Override 
                public void onClick(View v) { 
                    try { 
                        HttpClient client = new DefaultHttpClient(); 
 
                        HttpPost request = new HttpPost( 
                                "http://10.168.1.102:9999/IAccountRestService/SendMessageByPost1"); 
 
                        JSONObject p = new JSONObject(); 
                        p.put("value", 4); 
                        p.put("message", "ccc"); 
                        request.setEntity(new StringEntity(p.toString())); 
                        request.setHeader(HTTP.CONTENT_TYPE, "text/json"); 
 
                        HttpResponse response = client.execute(request); 
                        String re = EntityUtils.toString(response.getEntity()); 
                        Toast.makeText(MainActivity.this, re, 
                                Toast.LENGTH_SHORT).show(); 
                    } catch (Exception e) { 
                        e.printStackTrace(); 
                    } 
                } 
            }); 
        } 
    } 
 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
        getMenuInflater().inflate(R.menu.activity_main, menu); 
        return true; 
    } 

截圖

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *