WCF+restful
服务端代码:hosting方式
View Code
using System; using System.Collections.Generic; using System.Runtime.Serialization; using System.ServiceModel; using System.ServiceModel.Web; namespace Hosting { class Program { static void Main(string[] args) { using (ServiceHost host = new ServiceHost(typeof(AccountService))) { host.Open(); Console.WriteLine("AccountService Address:"); foreach (var endpoint in host.Description.Endpoints) { Console.WriteLine(endpoint.Address.ToString()); } Console.WriteLine("AccountService Started,Press any key to stop service..."); Console.ReadKey(); host.Close(); } } } [ServiceContract] public interface IAccountJsonService { [OperationContract(Name = "GetAccountDataJson")] [WebInvoke(Method = "*", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetAccountData", BodyStyle = WebMessageBodyStyle.Bare)] List<Account> GetAccountData(); [OperationContract(Name = "SendMessageJson")] [WebInvoke(Method = "get", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "SendMessage")] // UriTemplate = "SendMessage/?Message={Message}" string SendMessage(string Message); [OperationContract(Name = "SendMessage2Json")] [WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "SendMessage2")] string SendMessage2(ReqData data); [OperationContract(Name = "GetMessageDataJson")] [WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetMessageData", BodyStyle = WebMessageBodyStyle.Bare)] ReqData GetMessageData(); } [ServiceContract] public interface IAccountXmlService { [OperationContract(Name = "GetAccountDataXml")] [WebGet(RequestFormat = WebMessageFormat.Xml, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "GetAccountData", BodyStyle = WebMessageBodyStyle.Bare)] List<Account> GetAccountData(); [OperationContract(Name = "SendMessageXml")] [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml, UriTemplate = "SendMessage/{Message}", BodyStyle = WebMessageBodyStyle.Bare)] string SendMessage(string Message); } public class AccountService : IAccountJsonService, IAccountXmlService { public List<Account> GetAccountData() { return MockAccount.AccountList; } public string SendMessage(string Message) { return " Message:" + Message; } public string SendMessage2(ReqData data) { return data.Message + "message"; } public ReqData GetMessageData() { return new ReqData() { Message = "feww" }; } } [DataContract] public class ReqData { [DataMember] public string Message { get; set; } } [DataContract] public class Account { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } [DataMember] public string Address { get; set; } [DataMember] public DateTime Birthday { get; set; } } public class MockAccount { public static List<Account> AccountList { get { var list = new List<Account>(); list.Add(new Account { Name = "Bill Gates", Address = "YouYi East Road", Age = 56, Birthday = DateTime.Now }); list.Add(new Account { Name = "Steve Paul Jobs", Address = "YouYi West Road", Age = 57, Birthday = DateTime.Now }); list.Add(new Account { Name = "John D. Rockefeller", Address = "YouYi North Road", Age = 65, Birthday = DateTime.Now }); return list; } } } }
配置文件:app.config
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<behaviors>
<!--<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetUrl="mex" httpGetEnabled="true"/>
<serviceDebug httpHelpPageEnabled="true" includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>-->
<endpointBehaviors>
<behavior name="WebHttpBindingBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<services>
<service name="Hosting.AccountService">
<!--<endpoint address="xml" binding="webHttpBinding" contract="Hosting.IAccountXmlService" behaviorConfiguration="WebHttpBindingBehavior"/>-->
<endpoint address="" binding="webHttpBinding" contract="Hosting.IAccountJsonService" behaviorConfiguration="WebHttpBindingBehavior"/>
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:82/AccountService" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
客户端调用:利用webClient和httpWebRequest、HttpWebResponse请求数据
View Code
WebClient cli = new WebClient(); string json = cli.DownloadString(new Uri("http://127.0.0.1:82/AccountService/GetAccountData")); string strjson = "{\"Message\":\"feww\"}"; byte[] bytes = Encoding.ASCII.GetBytes(strjson); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri("http://127.0.0.1:82/AccountService/SendMessage2")); request.Method = "POST"; request.ContentType = "application/json";//"application/x-www-form-urlencoded";//"application/json";// request.ContentLength = bytes.Length; using (Stream rstream = request.GetRequestStream()) { rstream.Write(bytes, 0, bytes.Length); } HttpWebResponse res = (HttpWebResponse)request.GetResponse(); string strresult = ""; Stream receivestream = res.GetResponseStream(); Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); StreamReader sr = new StreamReader(receivestream, encode); char[] read = new char[256]; int count = sr.Read(read, 0, 256); while (count > 0) { string str = new string(read, 0, count); strresult += str; count = sr.Read(read, 0, 256); }


浙公网安备 33010602011771号