Post方式调用wcf服务

时间:2021-09-22 15:15:09

我们平常在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. string appKey = nvc["appKey"];
  8. string sign = nvc["sign"];
  9. string name=nvc["username"];
  10. var result = new ErrorModel
  11. {
  12. IsError = true,
  13. ErrorCode = -2,
  14. ErrorMsg = "操作信息",
  15. };
  16. return new JavaScriptSerializer().Serialize(result);
  17. }

客户端调用

  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. HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
  6. req.Method = "POST";
  7. req.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
  8. req.ContentLength = postBytes.Length;
  9. try
  10. {
  11. using (Stream reqStream = req.GetRequestStream())
  12. {
  13. reqStream.Write(postBytes, 0, postBytes.Length);
  14. }
  15. using (WebResponse res = req.GetResponse())
  16. {
  17. using (StreamReader sr = new StreamReader(res.GetResponseStream(), myEncode))
  18. {
  19. string strResult = sr.ReadToEnd();
  20. return strResult;
  21. }
  22. }
  23. }
  24. catch (WebException ex)
  25. {
  26. return "无法连接到服务器\r\n错误信息:" + ex.Message;
  27. }
  28. }
    1. string param = "appKey=44hbf622op&username=13011001233&sign=123456";
    2. postSend("http://localhost:17446/CusDataService.svc/AddData", param);