Restful WCF开发实践 互动版

C#编程实现HTTP访问(一)

我们新建一个web应用项目WCFClient,引入System.Net.Http.dllSystem.Net.Http.Net 4.5中新增的一个命名空间,其中的HttpClient对象可以方便的用于发送 HTTP请求和异步接收 HTTP响应

为了方便对Json数据进行序列化(Serialize)和反序列化(Deserialize)操作,这里我们还实现了一个类JsonHelper,具体代码请查看文件,这里篇幅所限,不再赘述。

  • GET操作:
protected async void Button2_Click(object sender, EventArgs e)
{
    string url = "http://me.hubwiz.com/RestWcfService/employee/";
    HttpClient client = new HttpClient();
    using (HttpResponseMessage message = await client.GetAsync(url+ TextBox1.Text))
    {
        message.EnsureSuccessStatusCode();
        string strRes =await message.Content.ReadAsStringAsync();
        Employee em = JsonHelper.JsonDeserialize<Employee>( strRes);
        Label2.Text = em.ToString();
    }
}

获取文本框中指定IDEmployee,显示在页面上。

  • POST操作: 用于新增一个Employee;
protected async void Button3_Click(object sender, EventArgs e)
{
    string url = "http://me.hubwiz.com/RestWcfService/employee";
    HttpClient client = new HttpClient();

    Employee em = new Employee();
    em.Id = "009";
    em.Grade = "G8";
    em.Department = "秘书";
    em.Name = "Lucy";

    StringContent theContent = new StringContent( JsonHelper.JsonSerializer<Employee>(em), System.Text.Encoding.UTF8, "application/json");
    using (HttpResponseMessage message = await client.PostAsync(url, theContent))
    { 
        message.EnsureSuccessStatusCode();
        this.GetALL();
    }
}

首先构造一个Employee对象,将其填充至HTTP请求消息content中,然后使用HttpClient对象将其通过POST方式发送至服务端,最后异步接收其响应结果,并调用GetALL()函数将服务器端的List中当前的所有对象输出显示。其中GetALL也使用了GET动作来完成,代码如下:

protected async void GetALL()
{
            string url = "http://me.hubwiz.com/RestWcfService/employees";
      string strRes = "";

      HttpClient client = new HttpClient();
      using (HttpResponseMessage message = await client.GetAsync(url))
      {
          message.EnsureSuccessStatusCode();
          strRes = await message.Content.ReadAsStringAsync();
      }
      List<Employee>  ll = JsonHelper.JsonDeserialize<List<Employee>>(strRes);
      Label2.Text = "";
      foreach (Employee em in ll)
          Label2.Text = Label2.Text+"</br>"+ em.ToString();
}

点击按钮POST新增一个对象,输出结果如下,可见POST执行成功。

测试服务
运行前文中编译的自我寄宿的WcfService终端应用程序,然后启动WCFClient应用中的页面WebForm1.aspx,点击按钮,查看页面的输出;并对照代码,学习REST WCF的访问。