当前位置: 代码迷 >> Android >> wcf rest 服务用来安卓和ISO调用1
  详细解决方案

wcf rest 服务用来安卓和ISO调用1

热度:586   发布时间:2016-04-24 11:39:59.0
wcf rest 服务用于安卓和ISO调用1

  最近项目中需要编写一个服务,以供安卓和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 上传文件....