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

石曼迪發表於2013-12-04

.net 4.0篇

在.net 4.0下面微軟並沒有提供類似Net.Http的Rest訪問元件,而是在codeplex上面提供的WCF REST Starter Kit Preview 2 裡面可以找到早期的版本,訪問地址:http://aspnet.codeplex.com/releases/view/24644,這個問題在.net 4.5中得到明確支援和完美解決。那我們就從這個地址下載安裝包進行安裝,然後在C盤預設的路徑下找到這幾個DLL:“Microsoft.Http.dll”、“Microsoft.Http.Extensions.dll”準備新增到專案的引用中去。

注意:本篇介紹的是基於接近0配置的實現方式,右鍵新增引用和非常龐大的配置的方法不在研究之列。

上一篇中我們介紹了服務端如何去搭建,那麼服務暫時就還是使用上一篇的。

開發工具:Visual Studio 2013

.net版本:4.0

一、新建控制檯程式:

注意:WinForm、WebForm的方式將會一樣。

開啟Visual Studio 2013新建控制檯WCFRestFulClient4,新增對組建的引用:

image

最後一個是用來序列化和反序列化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種操作方法:

    public static void GetPerson()
        {
            var client = new HttpClient();
            var strUrl =baseUrl+ "GetPerson";

            var response = client.Get(strUrl);
            response.EnsureStatusIsSuccessful();
            var json = response.Content.ReadAsString();
            var data = JsonConvert.DeserializeObject<User>(json);
            Console.WriteLine(data);
        }
        //2  ok
        public static void GetPersonById()
        {

            var client = new HttpClient();
            var strUrl = baseUrl+"GetPersonById/1";

            var response = client.Get(strUrl);
            response.EnsureStatusIsSuccessful();
            var json = response.Content.ReadAsString();
            var data = JsonConvert.DeserializeObject<User>(json);
            Console.WriteLine(data);
        }

        //3  ok
        public static void GetPersonPost()
        {
            var task = new User { ID = "0001" };
            var client = new HttpClient();
            var strUrl = baseUrl+"GetPersonPost";
            var response = client.Post(strUrl, GetContent(task));
            response.EnsureStatusIsSuccessful();
            Console.WriteLine(response.Content.ReadAsString());
        }

        //4 ok
        public static void GetPersonPostById()
        {
            var task = new User { Age = "12", ID = "001", Name = "zhangsan" }; ;
            var client = new HttpClient();
            var strUrl = baseUrl+"GetPersonPostById";
            var response = client.Post(strUrl, GetContent(task));
            response.EnsureStatusIsSuccessful();
            Console.WriteLine(response.Content.ReadAsString());

        }

解釋:使用Get方式請求服務,只需一個引數就是URL,如果要帶參在URL後面加,但是使用POST方式請求服務就需要一個HttpContent,這個HttpContent裡面一般包含的是引數,如果服務端定義為接收JSON型別,那麼這裡就需要序列化引數為JSON型別,服務端預設會解析成物件,PUT和DELETE暫時不討論。

另附產生HttpContent的方式:

        private static HttpContent GetContent(User task)
        {
            var strContent = JsonConvert.SerializeObject(task);
            var data = System.Text.Encoding.UTF8.GetBytes(strContent);
            return HttpContent.Create(data, "application/json");
        }

 

無論是哪種方式,都需要呼叫response.Content.ReadAsString();來獲取響應字串,然後根據實際情況去解析他。

response.EnsureStatusIsSuccessful()的作用是檢查響應的StatusCode。

那麼這4個方法寫完,只需在main方法中呼叫即可出現結果,具體步驟為:先啟動服務端ILongshi.BIZ:

image

然後啟動客戶端WCFRestFulClient4:

image

為了證實POST的引數能夠傳遞過去,我們斷點除錯服務端:

image

既然引數傳遞到了,就可以NNN~~~了。

本篇程式碼下載:點選

相關文章