.net 4.5篇
在.net 4.5下面微軟提供了System.Net.Http.dll可以非常方便的使用HTTP請求(其實是用來支援Asp.Net Web Api的,不過我們可以拿過來用)
服務仍然就還是使用第一篇的。
開發工具:Visual Studio 2013
.net版本:4.5
一、新建控制檯程式:
注意:WinForm、WebForm的方式將會一樣,風格還是接近0配置,個人比較討厭繁雜的配置,所以大篇幅的web.config不在本篇討論之列。
開啟Visual Studio 2013新建控制檯WCFRestFulClient45,新增對組建的引用:
注意:這裡光引用上面2個還不夠,還需要引用一個MVC的,如下所述:
C:\Program Files (x86)\Microsoft ASP.NET\ASP.NET MVC 4\Assemblies\System.Net.Http.Formatting.dll
才可以使用ReadAsAsync的非同步讀取,而ReadAsAsync是在System.Net.Http.HttpContentExtensions類中定義的一個擴充套件方法。沒有引數,它會使用媒體型別格式化器的預設設定,以便於解析響應體。預設格式化器支援JSON、XML和經過url編碼的表單資料(Form-url-encoded data)。(Result屬性的過程是執行緒阻塞的)
當然Newtonsoft.Json.dll還得用,他是用來序列化和反序列化JSON的,可以在這裡下載得到最新版:http://json.codeplex.com/
引用完成之後的完整截圖如下:
然後新增和服務端欄位一致的實體類如下:
public class User { public string ID { get; set; } public string Age { get; set; } public string Name { get; set; } }
二、新建一個輔助類:
為了更加直觀看到每種操作的結果,特新建輔助類ClientHelper,千萬別賦予這個類其他的想象,他僅僅只是一個普通類(絕對不是微軟WCF自動生成的代理類)。新增4種操作方法:
private readonly static string baseUrl = "http://localhost:3720/UserService.svc/"; //1 ok public static void GetPerson() { var strUrl = baseUrl + "GetPerson"; HttpClient client = new HttpClient(); HttpResponseMessage response = client.GetAsync(strUrl).Result; User u= response.Content.ReadAsAsync<User>().Result; Console.WriteLine(u.Name); } //2 ok public static void GetPersonById() { var strUrl = baseUrl + "GetPersonById/1"; HttpClient client = new HttpClient(); HttpResponseMessage response = client.GetAsync(strUrl).Result; User u = response.Content.ReadAsAsync<User>().Result; Console.WriteLine(u.Name); } //3 ok public static void GetPersonPost() { var user = new User { ID = "0001" }; var strUrl = baseUrl + "GetPersonPost"; HttpClient client = new HttpClient(); var response = client.PostAsJsonAsync(strUrl, user).Result; User u = response.Content.ReadAsAsync<User>().Result; Console.WriteLine(u.Name); } //4 ok public static void GetPersonPostById() { var user = new User { Age = "12", ID = "001", Name = "zhangsan" }; ; var strUrl = baseUrl + "GetPersonPostById"; HttpClient client = new HttpClient(); var response = client.PostAsJsonAsync(strUrl, user).Result; User u = response.Content.ReadAsAsync<User>().Result; Console.WriteLine(u.Name); }
這回對照上一章,我們明顯發現呼叫變得簡單了,要POST資料就直接傳遞例項化好的物件進去即可,服務端可以完美的接收到引數。並且加之ReadAsAsync非同步方法,返回的資料可以直接使用。
最終呼叫結果如:
同樣,為了證明引數被傳遞到了WCF,我們斷點除錯抓圖如下:
可以看出,非常輕鬆的完成了.net 4.5的WCF RestFul訪問,但是微軟的重點在於Asp.Net Web Api,當然本部落格也會接下來對Asp.Net Web Api進行研究,希望大家繼續關注。
本篇原始碼下載:點選下載