使用多種客戶端消費WCF RestFul服務(三)——.net4.5篇

石曼迪發表於2013-12-04

.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,新增對組建的引用:

image

注意:這裡光引用上面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/

引用完成之後的完整截圖如下:

image

然後新增和服務端欄位一致的實體類如下:

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非同步方法,返回的資料可以直接使用。

最終呼叫結果如:

image

同樣,為了證明引數被傳遞到了WCF,我們斷點除錯抓圖如下:

image

可以看出,非常輕鬆的完成了.net 4.5的WCF RestFul訪問,但是微軟的重點在於Asp.Net Web Api,當然本部落格也會接下來對Asp.Net Web Api進行研究,希望大家繼續關注。

本篇原始碼下載:點選下載

相關文章