zoukankan      html  css  js  c++  java
  • [数据共享(干货)] wcf rest 服务发布数据 以及获得数据

         最近在做一个项目 ,需要我们做一个东西,我们姑且叫数据共享吧,我们公司叫A公司,对方公司叫B公司,就是A公司提供一个数据服务接口出去,B公司如果想拿我们数据的时候直接调用我们的服务接口就行了,我们同样要获取对方B方的数据,直接拿对方的数据,经过协商我们决定采用WCF服务的REST方式进行数据共享,数据格式采用json,POST 方式进行请求

        1,首先就是我们要进行发布我们的数据,如何写一个WCF REST 服务呢,请看我的这篇文章http://www.cnblogs.com/huchaoheng/p/6379026.html 

    1)接口如下:

     [OperationContract]
            [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.Wrapped)]
            string GetProductListByCategoryName(string categoryName);

    2) 实现接口: 

    JsonConvert真的很厉害,可以将json  与object 进行互换
    public string GetProductListByCategoryName(string categoryName)
            {
                List<Product> ProductList = Products.Instance.ProductList.Where(t => t.CategoryName == categoryName).ToList();
                var result = JsonConvert.SerializeObject(ProductList);
                return result;
            }

        2,如何发布一个WCF服务 呢,我们知道WCF服务可以寄存到IIS 上,其实不止是IIS,现在我们姑且寄存到IIS上去,发布好的程序,启用32位程序改成True

       3,现在我们的服务已经发布好了,我们该如何进行获取呢。发布好的程序 点击URL 如下图所示:

    1)首先wcf rest  服务相当与一个URL  我们这里如何进行请求一个URL 呢,我们需要用到  HttpWebRequest ,这个怎么用,可以参考  http://www.cnblogs.com/kissdodog/archive/2013/04/06/3002779.html  别人写的博客,还不错 我们现在要写自己的请求URL 的方法 ,这样就可以轻松的可以获取到发布服务的json 格式

      /// <summary>
            /// huchao 
            /// 数据请求
            /// 2017.2.12
            /// </summary>
            /// <param name="url">wcf rest 请求地址</param>
            /// <param name="parametrds">wcf rest 服务请求参数 此处为json 格式</param>
            /// <returns></returns>
            public string GetResponeDataByPost(string url, string parametrds)
            {
                //进行数据请求
                HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url);
                httpRequest.ContentType = "application/json";
                httpRequest.Method = "POST";
                byte[] payload;
                payload = Encoding.UTF8.GetBytes(parametrds);
                httpRequest.ContentLength = payload.Length;
                Stream pRequestStream = httpRequest.GetRequestStream();
                pRequestStream.Write(payload, 0, payload.Length);
                pRequestStream.Close();
                //获得相应
                HttpWebResponse httpRespone = (HttpWebResponse)httpRequest.GetResponse();
                var myStream = httpRespone.GetResponseStream();
                StreamReader StreamReader = new StreamReader(myStream, Encoding.UTF8);
                var data = StreamReader.ReadToEnd();
                StreamReader.Close();
                myStream.Close();
                return data;
            }

    2)下面我们要写个类进行传入url  还有我们的参数

      public List<Product> GetObject(string servicesFullUrl, Object ParamInput)
            {
                var ParamInputs = JsonConvert.SerializeObject(ParamInput);
    
                string s = GetResponeDataByPost(servicesFullUrl, ParamInputs);
              return JsonConvert.DeserializeObject<List<Product>>(s);
                
            }

    这样是否能得到我们想要的结果呢,此处得到的s为下面图所示:

     

    我们调用 JsonConvert.DeserializeObject<List<Product>>(s);  会报错: 因为上面的得到json 并不能直接反序列化到list  需要我们稍微处理下:参考博客:http://blog.csdn.net/yyixin/article/details/7243472

     /// <summary>
            /// json 反序列化到Dictionary
            /// </summary>
            /// <param name="strJson"></param>
            /// <returns></returns>
            public Dictionary<string, string> JsonToDictionary (string  strJson) 
            {
                JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
                return  jsSerializer.Deserialize<Dictionary<string, string>>(strJson);
            }

    3)上面的方法重新写为

     重新输入参数

    GetObject("http://localhost:8011/ProductRESTService.svc/GetProductListByCategoryName", new
    {
    categoryName = "Category 1",

    });

    然后就可以获取到发布的数据 此处注意  categoryName  必须和发布的程序的 参数名称 categoryName 相同,否则数据获取不到.

    欢迎大家留言,我将第一时间进行回复

     

      

       

  • 相关阅读:
    HTML的BODY内标签介绍
    前端HTML基础和head部分
    pymysql模块
    数据库基础五
    数据库基础四
    数据库基础三
    数据库基础二
    数据库基础一
    洛谷P5055 可持久化文艺平衡树 (可持久化treap)
    BZOJ
  • 原文地址:https://www.cnblogs.com/huchaoheng/p/6390549.html
Copyright © 2011-2022 走看看