设为首页 收藏本站
查看: 1215|回复: 0

[经验分享] [数据共享(干货)] wcf rest 服务发布数据 以及获得数据

[复制链接]

尚未签到

发表于 2017-12-29 12:12:47 | 显示全部楼层 |阅读模式
  最近在做一个项目 ,需要我们做一个东西,我们姑且叫数据共享吧,我们公司叫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
DSC0000.png

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

  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为下面图所示:
DSC0002.png

  我们调用 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)上面的方法重新写为
DSC0003.png

  重新输入参数
  GetObject("http://localhost:8011/ProductRESTService.svc/GetProductListByCategoryName", new
  {
  categoryName = "Category 1",
  });
  然后就可以获取到发布的数据 此处注意  categoryName  必须和发布的程序的 参数名称 categoryName 相同,否则数据获取不到.
  欢迎大家留言,我将第一时间进行回复
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-429314-1-1.html 上篇帖子: delphi2010 开发及调试WebService 实例 下篇帖子: Bizatlk Accelerator for RosettaNet安装与配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表