前面介绍很多关于我的WCF开发框架的文章,前面的介绍思路,主要是基于一个整个仓库管理系统来进行整体介绍的,本来另辟蹊径,着重介绍一个备件信息的表的在我的WCF开发框架中,各层是如何体现的,通过简单的一个表的操作,走完一个WCF开发过程,着重介绍一个对象类,如何实现整个wcf的应用。另外穿插介绍如何基于net.tcp传输方式实现wcf的应用,以及使用这种方式需要注重的地方等功能模块的介绍。
我们先来看看我的WCF开发框架整体架构设计图。
上图中,值得注意的是,WCF服务层,可以Host(寄宿)在IIS中,也可以Host在Console控制台应用程序中,或者Windows服务中等方式。
WCF 代理层一般通过在程序中添加服务引用的方式添加,添加成功后会自动生成WCF客户端的代理层,类似于添加WebService的方式。
UI可以是Winform的实现、也可以是Web的方式实现,甚至还可以是其他方式的UI实现。由于我前面介绍的WCF开发框架中,主要以Winform方式来体现,本文就另外使用asp.net的Web方式来简单介绍使用WCF服务的例子,通过简单的调用使用,我们更加清晰其调用逻辑,更好的串联起来整个WCF开发框架的实现思路。
1、 WCF服务开发
首先我们来了解一个WCF服务的开发,需要实现那些东西。从下图可以看到,需要独立一个实体类层,因为实体类是需要很多地方引用的,独立又很多好处。
其次就是业务层,它需要把我们的业务逻辑+数据访问层(可以实现多种数据库的操作)放到一起,这样作为一个整体的项目工程,更加方便管理。
创建一个WCF服务工程,添加一些必要的接口层以及配置信息,就可以实现了。具体的操作过程,可以参考《基于我的Winform开发框架扩展而成的WCF开发框架》这篇文章的介绍。
其中WCF服务层的开发就差不多定型了,您需要做的就是完善整个业务逻辑以及服务的调用(调用业务逻辑相关信息),如果你是使用我的WCF开发框架,所有基类的东西(包括业务层各种基类,WCF服务层的基类接口及服务基类)都是可以不用操心的,只需要实现自己的业务逻辑即可。
2、WCF服务发布及调用
通过以上的步骤1创建了WCF服务后,接下来就是如何Host我们创建的WCF服务并在客户进行调用了。WCF服务一般建议通过IIS的Host方式,这样方便管理也方便操作。如果您发布的WCF服务是net.tcp的传输方式,而且你的IIS是XP或者Win2003的,那么只能通过控制台的Host方式进发布服务了。因为Net.tcp的寄宿方式是需要IIS7以上的版本才可以。
控制台的Host方式也很简单,通过应用步骤1的WCF服务项目,然后再Program.cs类中实现下面的代码即可。
static void Main(string[] args) { try { ServiceHost serviceHost = new ServiceHost(typeof(ItemDetailService)); serviceHost.Open(); Console.WriteLine("服务正在进行侦听......"); Console.ReadLine(); } catch (Exception ex) { Console.WriteLine(ex); Console.ReadLine(); } }
运行后,效果如下所示,就表示WCF顺利通过控制台Host成功了。
WCF客户端(本例为asp.net例子)的调用代码如下所示.
namespace TestNetTcpApp { public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!this.IsPostBack) { BindData(); } } private void BindData() { ItemDetailServiceClient client = new ItemDetailServiceClient(); DataTable dt = client.FindToDataTable(string.Format("ItemName like '%六角螺栓%' or ItemName like '%轴承%'")); if (dt != null) { dt.Columns.Add("Seq", typeof(int)); int i = 0; foreach (DataRow dr in dt.Rows) { dr["Seq"] = i++; } } this.dg.DataSource = dt; this.dg.DataBind(); //new ItemDetailServiceClient().Using(client => //{ // this.dg.DataSource = client.Find(string.Format("ItemName like '%六角螺栓%'")); // this.dg.DataBind(); //}); } } }
以上是简单的数据绑定例子,唯一值得注意的就是,本例因为考虑通过net.tcp的方式进行数据传输(也就是网络式局域网内的),因此在调用的页面,将会显示上千条的数据进行测试。如下界面所示。
3、配置信息要求。
一般的WCF服务,服务的Web.Config和调用客户的配置文件,都要对服务的相关参数进行配置,否则,很容易出现各种各种的错误提示,有响应超时、数据字节数超过支持数量、或者集合列表数据量大于设定值等等相关的错误。
1)数据量大或者集合大的配置
对于集合数据比较大,或者数量比较多的时候,如上传的图片字节比较大、返回的列表集合比较大等情况,会出现调用错误,其实这些都是因为配置参数的问题,修改即可避免,但是如果开始就知道避免,会减少反复调试的时间,提高开发效率。
2)Net.tcp的参数配置
这种方式一般是考虑在内外(局域网内)的服务调用考虑,这个调用响应会比较快,但是和传统的http配置方式有所差别,下面介绍他们的配置内容。