妄醒者

导航

 

  最近项目中需要编写一个服务,以供安卓和iOS调用.现在记录一下过程.(第一次写博客啊,潜水好久了......)

  wcf 具体的东西就不多说啦.上步骤和代码....

  首先新建一个wcf项目,新建一个实体类.代码如下

  

  [DataContract]
    public class Users
    {
        [DataMember]
        public string Id { get; set; }
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public int Gender { get; set; }
    }

  然后在接口中编写一些get和post方法.

[OperationContract]
        [WebGet(UriTemplate = "GetUsers",
           ResponseFormat = WebMessageFormat.Json)]
        [System.ComponentModel.Description("获取全部用户")]
        ICollection<Users> GetUsers();

        [OperationContract]
        [WebGet(UriTemplate = "GetUserById/{id}",
           ResponseFormat = WebMessageFormat.Json)]
        [System.ComponentModel.Description("根据id获取用户")]
        Users GetUserById(string id);

        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "AddUser",
            ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
        [System.ComponentModel.Description("添加用户")]
        Users AddUser(Users news);

  实现接口方法,代码如下:

 private ICollection<Users> _listCollection = new List<Users>()
        {
            new Users()
            {
                Id = "1",Gender=1,Name="张无忌"
            }, new Users()
            {
                Id = "2",Gender=2,Name="张三丰"
            }, new Users()
            {
                Id = "3",Gender=1,Name="任盈盈"
            },
        };
        public ICollection<Users> GetUsers()
        {
            return _listCollection;
        }

        public Users GetUserById(string id)
        {
            return _listCollection.FirstOrDefault(v => v.Id == id);
        }


        public Users AddUser(Users news)
        {
            _listCollection.Add(news);
            return news;
        }

  最后在配置文件中加入如下代码:

<system.serviceModel>
    <bindings>
      <webHttpBinding>
        <binding name="webBinding"  closeTimeout="00:40:00" receiveTimeout="00:40:00" sendTimeout="00:40:00"
maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" useDefaultWebProxy="false" >
          <security mode="None"></security>
          <readerQuotas maxDepth="32" maxArrayLength="2147483647" maxStringContentLength="2147483647" maxBytesPerRead="2147483647"/>
        </binding>
      </webHttpBinding>
    </bindings>
    <services>
      <service name="WcfServiceTest.Service1" behaviorConfiguration="wgjServiceBehavior">
        <endpoint address="" behaviorConfiguration="webBehavior"
                  binding="webHttpBinding" bindingConfiguration="webBinding" contract="WcfServiceTest.IService1">
        </endpoint>
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="webBehavior">
          <!--这里必须设置-->
          <webHttp helpEnabled="true"/>
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="wgjServiceBehavior">
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

  加上helpEnabled="true"并且在接口上加上System.ComponentModel.Description可在接口地址后面加上/help浏览方法说明.效果如下图

 

  

 

最后我们新建一个控制台应用程序来测试接口. 

 在项目中添加NuGet程序包中添加Http Client库:如图

现在开始编写方法:

        private static async void GetUserById(string id)
        {
            Console.WriteLine("-----------根据id获取用户----------");
            HttpClient httpClient = new HttpClient();
            var result = await httpClient.GetStringAsync("http://localhost:31572/Service1.svc/getUserById/1");
            Console.WriteLine(result);
        }

        private static async void GetUsers()
        {
            Console.WriteLine("-----------获取所有用户----------");
            HttpClient httpClient = new HttpClient();
            var result = await httpClient.GetStringAsync("http://localhost:31572/Service1.svc/GetUsers");
            Console.WriteLine(result);
        }

        public static async void AddUser()
        {
            Console.WriteLine("------------添加用户-----------------");
            HttpClient httpClient = new HttpClient();
            var jobj = new JObject();
            jobj["Id"] = "4";
            jobj["Name"] = "大师兄";
            jobj["Gender"] = 1;
            string str = jobj.ToString();
            HttpContent content = new StringContent(str);
            content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var response = await httpClient.PostAsync("http://localhost:31572/Service1.svc/AddUser", content);
            response.EnsureSuccessStatusCode();//错误引发异常
            Console.WriteLine(response.Content.ReadAsStringAsync().Result);
        }

  最后,这次就写到这里.下次是使用wcf rest 上传文件....

 

posted on 2016-02-02 10:04  妄醒者  阅读(364)  评论(0编辑  收藏  举报