[数据共享(干货)] 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 相同,否则数据获取不到.

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

 

时间: 2025-02-01 08:03:54

[数据共享(干货)] wcf rest 服务发布数据 以及获得数据的相关文章

WCF服务发布到IIS中去(VS2013+win7系统)

第一个WCF程序 1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序.建立完成后如下图所示: 2.删除系统生成的两个文件IService1.cs与Service1.svc. 3.添加自定义的WCF[服务文件]User.svc,此时vs2010会自动生成WCF接口文件IUser.cs,我们在IUser中定义WCF方法ShowName,在User.svc.cs对该接口的方法进行实现. 代码如下: using System.ServiceModel; namespace

8. Dubbo原理解析-代理之服务发布

服务发布是服务提供方向注册中注册服务过程,以便服务消费者从注册中心查阅并调用服务. 服务发布方在spring的配置文件中配置如下: <bean id="demoService"class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" /> 上面是在spring中配置的服务的具体实现,是spring中的一个普通的bean <dubbo:serviceinterface="com.alib

arcgis server之路网服务发布

路网服务发布首先需要建立好道路的网络集,为了保证道路网络分析的准确性,建立网络集之前,要对道路图层进行拓扑差错,确保道路的连通性.具体操作流程为:道路拓扑差错-建立几何网络集-路网服务发布. 1.道路拓扑差错: (1)通过Arccatalog建立个人地理数据库以及要素集,如图: (2)    在要素集右键菜单,导入道路图层,如图: (3)    在要素集右键菜单 新建-拓扑,弹出界面: (4)最后把拓扑的道路图层拖拽进去ArcMap进行拓扑差错,利用ArcGIS拓扑工具消除线条错误之处. 2.建

wcf Rest 服务宿主在windows服务及客户端访问

首先写好服务,代码如下: 1 using System; 2 using System.Collections.Generic; 3 using System.Runtime.Serialization; 4 using System.ServiceModel.Web; 5 using System.ServiceModel; 6 7 8 namespace Artech.WcfServices.Service 9 { 10 [ServiceContract(Namespace = "Artec

WCF之服务元数据

服务元数据是用来获得服务的EndPoint的信息,也就是它的ABC. 服务有两种方案可以发布自己的元数据. 一种是基于HTTP-GET协议提供元数据: 一种是元数据交换方式,它往往使用一个专门的终结点,称之为元数据交换终结点.元数据交换终结点与其它终结点相似,仍然包含了地址.绑定与契约,但是使用的服务契约为WCF提供的接口ImetadataExchange.实际上是使用了两种协议: 前者为HTTP/GET请求,后者为WS-MetadataExchange(MEX). 以MetadataExcha

NG2-我们创建一个可复用的服务来调用英雄的数据

<英雄指南>继续前行.接下来,我们准备添加更多的组件. 将来会有更多的组件访问英雄数据,我们不想一遍一遍地复制粘贴同样的代码. 解决方案是,创建一个单一的.可复用的数据服务,然后学着把它注入到那些需要它的组件中去. 我们将重构数据访问代码,把它隔离到一个独立的服务中去,让组件尽可能保持精简,专注于为视图提供支持. 在这种方式下,借助模拟服务来对组件进行单元测试也会更容易. 因为数据服务通常都是异步的,我们将在本章创建一个基于承诺 (Promise)的数据服务. 当然,一开始我们还是要让我们的程

WCF获取当前发布目录的绝对路径

一.在WCF中获取当前服务发布目录的绝对路径 1.string a = System.Web.Hosting.HostingEnvironment.MapPath("~"); 当没有开启ASP.NET相容模式时(aspNetCompatibilityEnabled="true"),WCF不支持HttpContext, HttpApplication,会报HttpContext.Current == null发生错误,开启aspNetCompatibilityEnab

Geoserver基本使用、WMS服务发布与OpenLayers测试

1.Geoserver与OpenLayers的下载 Geoserver:http://geoserver.org/ OpenLayers:http://openlayers.org/ 2.安装部署Geoserver 环境:jdk 1.7,geoserver-2.5 配置:修改geoserver-2.5/ect/jetty.xml 的端口为8089,避免端口冲突. <Call name="addConnector"> <Arg> <New class=&qu

Dubbo源码分析(十):服务发布

服务发布是服务提供方向注册中注册服务过程,以便服务消费者从注册中心查阅并调用服务. 服务发布方在spring的配置文件中配置如下: <bean id="demoService"class="com.alibaba.dubbo.demo.provider.DemoServiceImpl" /> 上面是在spring中配置的服务的具体实现,是spring中的一个普通的bean <dubbo:serviceinterface="com.alib