浅析基于WCF技术的报表服务扩展

开发 后端
本文将为大家介绍的是基于WCF技术的报表服务扩展,希望通过本文能让大家对这一前端技术有所了解。

本文将讲到WCF技术的报表服务扩展,51CTO开发频道向您推荐《WCF开发基础》技术专题。

为什么要进行扩展呢?扩展的目的是为了和自己现有的系统整合在一起。比如现有系统已经很复杂,能处理很多业务,设计系统的开发人员没有充分考虑到技术的变更,当一项新技术推出以后,为了能把新技术应用到旧有的系统中,我们需要对新技术做一些扩展,以方便应用到我们的现有系统中。

追随新技术改系统是比较笨的方法。以例子为证,一开始,系统用Remoting作为通信框架,WCF横空出世后,又把自己的系统用WCF技术重写一遍通信框架。这种做法很累,一不小心及到业务方面的修改,系统的稳定性大打折扣。

新技术一般都留下有扩展的接口和方法,对新技术研究充分,写点扩展。既能应用新技术的方便,又可以让现在的系统不作任何改动,这种方法值得向大家推荐。当然,作为主程序员的你,一般要牺牲数个周末的时间去研究新技术,而且关于做扩展(Extension)类的知识库和文章,一般要借助于老外的英语博客才能找到答案。人家分工细,自然在各方面都做的比较好。

做报表,一般是直接用SQL语句,生成一个XSD的架构文件,它包含字段。然后把字段拖动到报表中,形成报表设计文件,运行时再给报表传送数据即可。这里介绍的方法,是把SQL语句包装到一个.NET Assembly中,通过调用Assembly,间接调用SQL来设计报表。

数据处理方面的扩展,我还了解到如何从Web Services中取数据字段,然后应用于报表设计。这篇文章是介绍如何从.NET 服务器取数据,然后应用于报表设计。

目的:搭建一个报表设计,开发的工具箱

基于WCF制作的服务器,负责抓取数据;报表设计器向服务器发送查询语句请求,接受服务器返回值

原本的SQL查询语句的写法是这样:

SQL查询语句

现在我们换成这样的查询数据库的写法

查询数据库的写法 

也就是这样的查询语句的写法

  1. assembly=Tracking.Report.Quotation;   
  2. class=Tracking.Report.Quotation;   
  3. method=GetCustomerList(@Customer);  

其余的报表制作,部署的步骤都不变,我改变的是数据处理部分。

好处:充分发挥T_SQL集合计算的能力和C#在数值计算和字符串处理方面的威力

特别是一些计算,字符串方面的处理,用SQL语句可能不方便,要写很多的T_SQL代码。但是如果用这种方法,充分发挥程序语言(C#)和数据库语言(T_SQL)的长处,把集合运算部分用T_SQL来处理,计算和字符文本的处理则留在C#代码中。

设计扩展项目 Data Process Extension(Class Library)

设计扩展项目 

如果你不熟悉这里面的接口和方法,请参考我的这篇文章,

Reporting Services Extension:File Share Data Processing Extension全程指南

它是用来为这篇文章热身用的。

设计服务器项目(Console Project)

image 

它只有一个Program文件,代码如下

设计服务器项目

这是打开服务器的代码。通常合适的做法是把Console项目类型转化为Windows Services.

为了方便调试扩展项目,我先写一个测试客户端项目,以方便调试问题。

扩展项目测试客户端(Console)

 扩展项目测试客户端

主要代码如下

  1. class Program   
  2.    {   
  3.        static void Main(string[] args)   
  4.        {  
  5.  
  6.            ChannelFactory<IServiceManager> scf;   
  7.            scf = new ChannelFactory<IServiceManager>(   
  8.                    new NetTcpBinding(), "net.tcp://localhost:4000/Reporting");   
  9.            IServiceManager s;   
  10.            s = scf.CreateChannel();            
  11.           string assembly = "Tracking.Report.Quotation";   
  12.            string cclass = "Tracking.Report.Quotation";   
  13.            string method = "GetCustomerList";   
  14.            object[] arg = new object[] { "TRADH" };      
  15.            DataSet ds = s.GetDataSet(assembly, cclass, method, arg);   
  16.            if (ds != null)   
  17.                Console.WriteLine("Get Data :{0}", ds.Tables[0].Rows.Count);   
  18.            Console.ReadLine();            
  19.        }   
  20.    }  

打开报表服务器,运行这个项目,以验证服务器和客户端是否可以正常通信。

打开报表服务器

运行任何与扩展相关的程序,必须先打开这个服务器。

查询项目(Class Library)

这个项目把SQL语句封装成程序集,供报表服务器反射调用之,返回数据集给客户端。

Quotation类的代码如下

查询项目 

您可能已经注意到了,GetCustomerList方法就是以下SQL语句的C#封装

  1. SELECT [CustomerID],[CompanyName],[ContactName]   
  2.       ,[ContactTitle],[Address],[City]   
  3.       ,[Region] ,[PostalCode],[Country]   
  4.       ,[Phone] ,[Fax]   
  5.   FROM [Northwind].[dbo].[Customers]   
  6. WHERE CustomerID=@CustomerID  

至此,所有的服务器端项目都设计完毕,您需要部署Extension项目。

如果不熟悉Extension的部署,请参考这篇文章

Reporting Services Extension:File Share Data Processing Extension全程指南

下面进入应用开发部分,打开BIDS,新建一个报表项目,添加报表项。

在数据连接字符串部分,糊弄选开发的Extension,输入本机服务器地址作为连接字符串

连接字符串 

撰写查询语句

撰写查询语句 

执行查询,刷新字段以用来设计报表

执行查询

下面的步骤与以通常开发报表的方法没有任何不同。

进入布局页面,设计报表

设计报表

预览一下效果,输入参数CustomerID:TRADH

预览效果 

这样,终于实现了这种结构的报表设计扩展。

关于报表设计和开发,我还整理了如下文章

实现多国语言的Reporting Services项目 ,用于讲解与报表全球化相关的设计方法

如果你不熟悉基本的报表开发,设计流程,这里有详细的介绍

ASP.NET RDLC 报表开发详解

如果部署时有问题,可参考这篇文章

部署含有ReportView的控件的ASPX页面时出现错误

这个系列的文章比较杂乱,没有系统化。

园子里有朋友征求关于Reporting Services的开发教程或总结,这个主意不错。很早以前,园子里有位报表的高手:蜡人张。我那时就是看他的文章,才逐步熟悉Reporting Services技术的。真的很感激这些无私奉献的朋友。

关于验证扩展(Forms Authentication),可以参考这位朋友的文章:

实现SQL2008 Reporting Service的表单验证

还有其它方面的扩展。比如做一个报表Item的扩展,做一个barcode,作为报表项,与常用的Table,Matrix一样,被报表重复使用。关于这个主题,你可以参考PolygonsCustomReportItem

项目,把barcode技术集成到Reporting Services中

原文标题:报表服务扩展:基于WCF技术的报表服务扩展

链接:http://www.cnblogs.com/JamesLi2015/archive/2010/03/29/1699972.html

责任编辑:彭凡 来源: 博客园
相关推荐

2010-02-24 10:41:28

WCF服务保护

2011-05-19 10:39:26

2009-11-05 11:23:08

WCF宿主

2009-03-16 09:16:13

行为扩展WCF.NET

2010-02-25 13:35:27

WCF tcpTrac

2023-06-18 19:21:04

技术架构服务网格

2009-11-02 12:46:15

Winform

2012-03-01 10:28:09

2022-08-06 08:58:40

5G5G通信网络企业专网

2010-02-26 15:07:20

WCF单例服务

2023-12-18 08:57:22

GAN网络

2009-11-06 15:41:25

WCF自托管宿主

2011-05-19 10:57:21

2009-11-06 14:08:06

WCF行为扩展

2010-03-01 18:04:35

WCF配置绑定

2010-02-22 10:52:34

PDA访问WCF

2010-03-02 09:24:22

WCF变更行为

2009-08-29 16:45:27

2023-11-11 19:34:30

摄像头慢直播

2009-08-10 17:36:17

C#扩展方法
点赞
收藏

51CTO技术栈公众号