我的WCF开发框架简化版及基于NET.TCP传输方式的实现

前面介绍很多关于我的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配置方式有所差别,下面介绍他们的配置内容。

 

posted on 2012-06-11 13:36  伍华聪  阅读(8951)  评论(10编辑  收藏  举报

导航