Android訪問WCF服務(上篇)-服務端開發

來源:互聯網
上載者:User

 

(轉)http://www.cnblogs.com/VinC/archive/2011/02/24/1964049.html 

 

本章目的: 用Wcf建立可以上Android可以訪問的資料服務, 資料轉送格式採用比較適合於移動互連網傳輸的Json格式.

服務的開發流程我們按照 服務契約(ServiceContract), 服務實現(Service), 實體物件模型(Model) 及服務發布的流程來介紹.

由於自己對Http請求的連結認識的比較淺,對於有些問題沒法做出清楚明了的解釋, Android訪問WCF這篇文章我會貼出來代碼, 讓後說明一下關注的地方, 不做深入研究.

一. 服務契約(Contract)

[ServiceContract]<br /> public interface IAccountJsonService<br /> {<br /> [OperationContract(Name = "GetAccountDataJson")]<br /> [WebGet(RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetAccountData", BodyStyle = WebMessageBodyStyle.Bare)]<br /> List<Account> GetAccountData();</p><p> [OperationContract(Name = "SendMessageJson")]<br /> [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, UriTemplate = "SendMessage/{Message}", BodyStyle = WebMessageBodyStyle.Bare)]<br /> string SendMessage(string Message);<br /> }<br />

 

此契約定義了兩個方法, GetAccountData(擷取Account資料列表, 方法不帶參數), SendMessage, 擷取從用戶端傳過來的資料, 並返回;

1. 這裡面注意WebInvoke(SendMessage方法)這個Attribute, Method代表了Http的存取方法, 我們這是從伺服器擷取資料,是請求資料, 所以用GET, 這個也可以用另外一個Attribute來替代-WebGet(GetAccountData方法);

2. 我們要給用戶端返回Json資料,我們只需在WebInvoke or WebGet Attribute中指定ResponseFormat的格式即可, 這個從名字命名就可以看出來是制定返回的資料格式的.

3. 要注意UriTemplate屬性, 這個是指定我們請求時的方法路徑, 後面給出樣本.

二. 服務實現(Service)

public class AccountService : IAccountJsonService<br />{<br /> public List<Account> GetAccountData()<br /> {<br /> return MockAccount.AccountList;<br /> }<br /> public string SendMessage(string Message)<br /> {<br /> return " Message:" + Message;<br /> }<br />}<br />

 

此處只是實現了IAccountJsonService介面.

三. 實體物件模型&類比資料實體類定義:

[DataContract]<br /> public class Account<br /> {<br /> [DataMember]<br /> public string Name { get; set; }<br /> [DataMember]<br /> public int Age { get; set; }<br /> [DataMember]<br /> public string Address { get; set; }<br /> [DataMember]<br /> public DateTime Birthday { get; set; }<br /> }<br />

類比資料:

public class MockAccount<br /> {<br /> public static List<Account> AccountList<br /> {<br /> get<br /> {<br /> var list = new List<Account>();<br /> list.Add(new Account { Name = "Bill Gates", Address = "YouYi East Road", Age = 56, Birthday = DateTime.Now });<br /> list.Add(new Account { Name = "Steve Paul Jobs", Address = "YouYi West Road", Age = 57, Birthday = DateTime.Now });<br /> list.Add(new Account { Name = "John D. Rockefeller", Address = "YouYi North Road", Age = 65, Birthday = DateTime.Now });<br /> return list;<br /> }<br /> }<br /> }<br />

 

類比資料返回一個Account的列表, 含有三條類比資料, Birthday用DateTime.Now可是隨時查看資料是不是最新產生的.

 

四. 服務發布

在這個例子裡面, 我們的服務採用Console的發布形式, 如果採用IIS發布, 只要參考WCF的服務配置資訊, 在IIS環境下配置就OK了.

WCF配置資訊

<system.serviceModel><br /> <behaviors><br /> <serviceBehaviors><br /> <behavior name=""><br /> <serviceMetadata httpGetUrl="mex" httpGetEnabled="true"/><br /> <serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/><br /> </behavior><br /> </serviceBehaviors><br /> <endpointBehaviors><br /> <behavior name="WebHttpBindingBehavior"><br /> <webHttp/><br /> </behavior><br /> </endpointBehaviors><br /> </behaviors></p><p> <services><br /> <service name="Hosting.AccountService"><br /> <endpoint address="xml" binding="webHttpBinding" contract="Hosting.IAccountXmlService" behaviorConfiguration="WebHttpBindingBehavior"/><br /> <!--<endpoint address="json" binding="webHttpBinding" contract="Hosting.IAccountJsonService" behaviorConfiguration="WebHttpBindingBehavior"/>--><br /> <host><br /> <baseAddresses><br /> <add baseAddress="http://127.0.0.1:82/AccountService"/><br /> </baseAddresses><br /> </host><br /> </service><br /> </services><br /> </system.serviceModel></p><p>

 

控制台進行服務的託管發布

 

class Program<br /> {<br /> static void Main(string[] args)<br /> {<br /> using (ServiceHost host = new ServiceHost(typeof(AccountService)))<br /> {<br /> host.Open();<br /> Console.WriteLine("AccountService Address:");<br /> foreach (var endpoint in host.Description.Endpoints)<br /> {<br /> Console.WriteLine(endpoint.Address.ToString());<br /> }<br /> Console.WriteLine("AccountService Started,Press any key to stop service...");<br /> Console.ReadKey();<br /> host.Close();<br /> }<br /> }<br /> }<br />

下篇將介紹Android如何訪問我們編寫的服務.

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.