我們平常在PC端調用WCF服務,只要知道WCF服務的地址,客戶端直接添加引用服務就可以使用了,殊不知還有其他方式,其實,我們也可以
通過HTTP POST的方式調用WCF服務,這樣就不用添加引用了,在手機移動端開發后台服務,都是通過Post的形式調用WCF服務,當然,這種方式在PC也可以使用。
我們來看下面的一個簡單示例。下面的示例演示了服務器端和客戶端的簡單通訊
服務器端返回一個JSON字符串,代碼如下
契約定義
1 [OperationContract] 2 [WebInvoke(UriTemplate = "AddData", Method = "POST", RequestFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)] 3 string AddData(Stream stream);
契約實現
1 public string AddData(Stream stream) 2 { 3 StreamReader sr = new StreamReader(stream); 4 string s = sr.ReadToEnd(); 5 sr.Dispose(); 6 NameValueCollection nvc = HttpUtility.ParseQueryString(s); 7 8 string appKey = nvc["appKey"]; 9 string sign = nvc["sign"]; 10 string name=nvc["username"]; 11 12 var result = new ErrorModel 13 { 14 IsError = true, 15 ErrorCode = -2, 16 ErrorMsg = "操作信息", 17 }; 18 return new JavaScriptSerializer().Serialize(result); 19 }
客戶端調用
1 public static string postSend(string url, string param) 2 { 3 Encoding myEncode = Encoding.GetEncoding("UTF-8"); 4 byte[] postBytes = Encoding.UTF8.GetBytes(param); 5 6 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); 7 req.Method = "POST"; 8 req.ContentType = "application/x-www-form-urlencoded;charset=UTF-8"; 9 req.ContentLength = postBytes.Length; 10 11 try 12 { 13 using (Stream reqStream = req.GetRequestStream()) 14 { 15 reqStream.Write(postBytes, 0, postBytes.Length); 16 } 17 using (WebResponse res = req.GetResponse()) 18 { 19 using (StreamReader sr = new StreamReader(res.GetResponseStream(), myEncode)) 20 { 21 string strResult = sr.ReadToEnd(); 22 return strResult; 23 } 24 } 25 } 26 catch (WebException ex) 27 { 28 return "無法連接到服務器\r\n錯誤信息:" + ex.Message; 29 } 30 }
1 string param = "appKey=44hbf622op&username=13011001233&sign=123456"; 2 3 postSend("http://localhost:17446/CusDataService.svc/AddData", param);
1 <services> 2 <service behaviorConfiguration="RESTBehaviour" name="Jawasoft.TrackCodeService.Server.TrackCodeService"> 3 <endpoint address="" behaviorConfiguration="webHttp" binding="webHttpBinding" 4 ame="post" contract="Jawasoft.TrackCodeService.Server.ITrackCodeService"/> 5 6 </service> 7 </services>
轉載:
http://blog.csdn.net/zx13525079024/article/details/27069379