随笔-55  评论-238  文章-0  trackbacks-8
  2008年7月5日
Service Broker实现发布-订阅(Publish-Subscribe)框架
 
 
Service Broker 实现一套完整的发布-订阅方案,其中author 发送Service Broker Message(又称article)到发布者(Publisher)。发布者负责分发消息给不同的订阅者(Subscriber)。每一个订阅者通过订阅来接受特定的消息。
 
下图描述了这一个发布/订阅方案:
 
 
Service Broker实现发布-订阅(Publish-Subscribe)框架(1)
 
Service Broker实现发布-订阅(Publish-Subscribe)框架(2)
 
Service Broker实现发布-订阅(Publish-Subscribe)框架(3)
 
http://blog.EntLib.com 译者注:本文翻译Apress出版《Pro SQL Server 2005 Service Broker》的其中一个章节。现已翻译完成,欢迎交流、分享。谢谢!

 

 

 

posted @ 2008-09-05 08:23 EntLib 阅读(733) | 评论 (1)编辑
ASP.NET 3.5 新特性开发向导实践(附项目源码下载)
 
 
本篇文章将演示ASP.NET 3.5 部分新功能、新特性,包括LINQ、ListView控件、LinqDataSource、DataPager 分页控件、ASP.NET AJAX等等。
 
ASP.NET 3.5 新特性开发向导实践(附项目源码下载)- Part 1 
 
ASP.NET 3.5 新特性开发向导实践(附项目源码下载)- Part 2
 
示例程序演示界面:
 
 
按照上面的示例步骤可以轻松完成整个示例程序,几乎没有手动编写代码。上述只是演示了ASP.NET 3.5 部分新功能和新特性。欢迎交流、分享 http://forum.entlib.com/论坛。
 
本示例开发软件:Visual Studio 2008 和 SQL SERVER,使用Northwind 示例数据库的Customers表。
 
 
 
posted @ 2008-09-04 08:22 EntLib 阅读(650) | 评论 (2)编辑
EntLib.com 网站征集中文名称,希望各位热心的朋友踊跃发言
 
 
EntLib.com Team 专注于开源.Net 系统,如开源ASP.NET论坛、开源ASP.NET博客、开源ASP.NET电子商务平台(前台购物系统和后台业务处理系统),以及分享、交流Microsoft .Net平台的相关技术及企业架构设计,如.Net Framework、ASP.NET、C#、ADO.NET Entity Framework、MVC Framework、AJAX、LINQ、SQL Server、Service Broker、WCF/WF/WPF、BizTalk、ESB (Enterprise Service Bus)、SOA (Service-Oriented Architecture) 、Enterprise Library 等等。
 
开源ASP.NET 论坛系统:
http://forum.entlib.com
开源ASP.NET 论坛系统下载、安装手册:
http://forum.entlib.com/Default.aspx?g=posts&t=171
 
 
开源ASP.NET 博客平台:
http://blog.entlib.com
开源ASP.NET 博客平台下载、安装手册:
http://forum.entlib.com/Default.aspx?g=posts&t=170
 
 
专业电子商务平台系统:
http://www.entlib.com/product/default.aspx
 
 
EntLib Enterprise Library(企业库)的简写,我们EntLib.com Team 希望征集一个响亮的、简明的中文名称,希望各位热心的朋友用于发言。
 
也欢迎热心的朋友对我们网站的logo提供更好的建议。
 



本文原链接:

http://forum.entlib.com/Default.aspx?g=posts&t=192

 

 

 

 

posted @ 2008-09-01 22:42 EntLib 阅读(172) | 评论 (8)编辑
EntLib.com / Subtext 开源ASP.NET博客系统上线
 
 
基于Subtext v2.0 开源ASP.NET博客系统在http://blog.EntLib.com 上线,欢迎各位访问、体验。
 
电子商务平台:http://www.EntLib.com  
开源论坛主页:http://forum.EntLib.com  
开源博客主页:http://blog.EntLib.com
 
EntLib.com 在Subtext  v2.0 开源ASP.NET/C#项目的基础上,进行了中文汉化及定制化开发工作。
本次主要更新如下:
1. 修正Subtext 项目的一些bugs。
2. 汉化Subtext 首页及AnotherEon001 模板,同时修改部分CSS UI设置。
3. 汉化修改并启用 tags 标签设置。
4. 汉化修改 FCKEditor 编辑器。
 
EntLib.com 博客界面如下:




欢迎各位交流、分享Subtext 开源ASP.NET博客系统的中文汉化及定制化开发经验。
 
如需要博客源代码http://blog.EntLib.com ,欢迎留言。
 
相关文章:
1.       轻松搭建博客平台-开源ASP.NET 博客Subtext 的安装 
2.       开源ASP.NET 多用户博客系统Subtext演示 – 系列2
 
 原文链接:
EntLib.com / Subtext 开源ASP.NET博客系统上线
 
 

posted @ 2008-08-31 12:21 EntLib 阅读(372) | 评论 (7)编辑
使用ADO.NET Entity Framework的实体作为数据源Data Source(附Demo程序下载)- 系列3
 
 
本文是ADO.NET Entity Framework 系列文章第三篇,继续演示如何使用ADO.NET Entity Framework 的实体作为数据控件的数据源Data Source,轻松将数据记录显示在数据控件中。
 
ADO.NET Entity Framework 前两篇文章如下:
ADO.NET Entity Framework 入门示例向导(附Demo程序下载)
ADO.NET Entity Framework 入门示例向导(附Demo程序下载)- 系列2
 
首先,根据ADO.NET Entity Data Model 向导创建EDM文件,具体可以参考《ADO.NET Entity Framework 入门示例向导(附Demo程序下载)》文章。
 
1.       增加New Data Source
操作步骤如下:



 
选择Add New Data Source,弹出Data Source Configuration Wizard 窗口,界面如下:
 


 
选择Object 作为Data Source Type,然后点击Next按钮。
 
在向导的下一页,展开树节点 – Data Model,显示所有的Entity 类。选择需要创建Data Source 的 Entity 类,然后点击Next 按钮。
 


 
 
2.       显示Data Source
选择Data 菜单 / Show Data Sources 菜单项,显示项目中的Data Sources。
 



 
3.       将上一步创建的Data Source 拖曳到Windows Form 窗体上。
默认情况下,一个新的DataGridView 控件和Navigation toolbar 控件自动添加到Windows Form窗体上。同时,也自动创建BindingSource 和Binding Navigation 控件,并且上述的两个控件与BindingSource 和Binding Navigation 控件进行了自动绑定。
 
界面如下:



 
4.       下面进一步在DataGridView 控件显示Data Source的数据。
在Windows Form 添加如下代码:
        private void Form1_Load(object sender, EventArgs e)
        {
            NorthwindEntities northwindEntities = new NorthwindEntities();
            customersBindingSource.DataSource = northwindEntities.Customers;
        }
 
示例程序运行界面如下:



 
5.       编辑和保存数据
BindingSource 组件确保对DataGridView 控件的编辑更新到Entity Class。当用户完成编辑后,需要保存更新的数据到数据库中。
下一步,将 Navigation toolbar 工具栏的Save 的Enable的属性调整为True。双击Save按钮,在Save 的click 事件添加如下代码:
        private void customersBindingNavigatorSaveItem_Click(object sender, EventArgs e)
        {
            northwindEntities.SaveChanges();
        }
SaveChanges() 方法负责将Entity class 的更新保存到数据库中。
 



 
下载本示例项目的源代码
 
 
 
 
posted @ 2008-08-26 21:31 EntLib 阅读(1216) | 评论 (0)编辑
ADO.NET Entity Framework 入门示例向导(附Demo程序下载)- 系列2
 
 
本篇文章在《ADO.NET Entity Framework 入门示例向导(附Demo程序下载)》基础上,进一步演示如何使用EntityClient 新数据提供程序、对象服务(Object Services)和LINQ to Entities与概念模型交互。Entity Framework 使用概念层、映射层和逻辑层将关系数据库结构抽象化。EntityClient和Entity SQL(新语言-实体SQL)可以与概念层的实体数据模型(Entity Data Model - EDM)交互。
 
如下是Entity Framework 组件图:
 

 
首先,在Class Library 项目中增加ADO.NET Entity Data Model文件,具体请参考《ADO.NET Entity Framework 入门示例向导(附Demo程序下载)》。
 
下面分别演示如何使EntityClient、对象服务Object Services、LINQ to Entities 访问概念数据模型。
1.使用EntityClient
EntityClient 是新的.NET 数据提供程序,EntityClient使用基于文本的语言Entity SQL与概念模型通信。
EntityClient 中的类与常见的 ADO.NET 提供程序中的类相似。例如,使用 EntityCommand 对象执行 EntityClient 查询,这需要 EntityConnection 对象连接到 EDM。当 EntityClient 与 EDM 中的实体交互时,EntityClient 不返回实体的实例而返回 DbDataReader 对象中的所有结果。EntityClient 可以返回一组标准行和列,也可以通过 DbDataReader 返回更复杂的分层数据的表示形式。
示例代码:
            string customerID = txtCustomerID.Text.Trim();
            // Contains a reference to an Entity Data Model (EDM) and a data source connection.
            using (EntityConnection cn = new EntityConnection("Name=NorthwindEntities"))
            {
                cn.Open();
                EntityCommand cmd = cn.CreateCommand();
                cmd.CommandText =
                     "SELECT VALUE c FROM NorthwindEntities.Customers "+
                     "AS c WHERE c.CustomerID = @customerID";
                cmd.Parameters.AddWithValue("customerID", customerID);
                DbDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
                while (rdr.Read())
                    Console.WriteLine(rdr["CompanyName"].ToString());
                rdr.Close();
            }
 
示例使用 EntityClient 连接到概念模型并检索特定的客户。EntityConnection 可以接受概念层的完整连接字符串或 App.Config 文件中连接字符串的名称。连接字符串包含元数据文件(CSDL、MSL 和 SSDL 文件)列表,以及存储的专用于数据库的连接字符串信息。
 
如下是示例程序使用的数据库连接串:
 <connectionStrings>
    <add name="NorthwindEntities" connectionString=" metadata= res://NorthwindEDM/NorthwindModel.csdl|res://NorthwindEDM/NorthwindModel.ssdl|res://NorthwindEDM/NorthwindModel.msl; provider=System.Data.SqlClient;provider connection string=&quot; Data Source=localhost; Initial Catalog=Northwind;Integrated Security=True; MultipleActiveResultSets=True&quot;"providerName="System.Data.EntityClient" />
 </connectionStrings>
 
 
2.使用对象服务Object Services
与由 EDM 表示的数据进行交互的另一种方法是使用对象服务Object Services,对象服务允许直接返回对象列表。
 
下面的示例演示了如何使用对象服务和实体 SQL 进行查询以检索 Customers 列表:
            NorthwindEntities northwindContext = new NorthwindEntities();
            string customerID = txtCustomerID.Text.Trim();
 
            ObjectQuery<Customers> query = northwindContext.CreateQuery<Customers>(
            "SELECT VALUE c FROM Customers AS c WHERE c.CustomerID = @customerID",
             new ObjectParameter("customerID", customerID));
 
            foreach (Customers c in query)
                Console.WriteLine(c.CustomerID + "---" + c.CompanyName);
 
在 EDM 中,EntityContainer 由从 ObjectContext(在本示例中为 northwindContext)继承的类表示。ObjectContext 类实施 ObjectQuery<T> 接口,从而使其可以使用实体 SQL 或 LINQ 创建查询。
CreateQuery 方法接受参数化的实体 SQL 语句,该语句定义了将检索 Customers 实体列表的查询。通过使用 foreach 语句对 ObjectQuery<Customers> 进行迭代时将执行作用于数据库的实际 SQL 语句。
 
 
3. 使用 LINQ to Entities
上述实体SQL脚本可以通过如下的LINQ to Entities 脚本实现,代码如下:
 
            NorthwindEntities northwindContext = new NorthwindEntities();
            string customerID = txtCustomerID.Text.Trim();
 
            var query = from c in northwindContext.Customers
            where c.CustomerID == customerID
            select c;
 
            foreach (Customers c in query)
                Console.WriteLine(c.CustomerID + "---" + c.CompanyName);
 
本示例程序演示界面如下:
 

 
使用实体框架Entity Framework,开发人员可以通过对象模型(而不是逻辑/关系数据模型)专注于数据。一旦完成 EDM 的设计并将其映射到关系存储后,就可以使用 EntityClient、ObjectServices 和 LINQ 等多种技术与对象交互。
 
本文是http://forum.entlib.com 开源ASP.NET技术论坛小组,在参考《ADO.NET 实体框架概述》(MSDN Magazine)之上,进行的示例分析、演示。
 
如有问题或疑问,欢迎到http://forum.entlib.com 技术论坛进行交流。
 
下载示例代码和项目
 
 
 
posted @ 2008-08-25 20:38 EntLib 阅读(1400) | 评论 (0)编辑
ADO.NET Entity Framework 入门示例向导(附Demo程序下载)
 
 
ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架,它使开发人员可以通过对象模型(而不是逻辑/关系数据模型)专注于数据。实体框架Entity Framework使用概念层、映射层和逻辑层将逻辑数据库结构抽象化。本文http://forum.entlib.com 开源论坛小组提供。
 
实体数据模型(Entity Data Model
实体框架的核心位于其模型中。实体框架支持表示数据库中的关系架构的逻辑存储模型。关系数据库通常存储数据的方式与应用程序使用数据的方式不同。通常,这会迫使开发人员按照数据库包含数据的结构检索数据。因此,开发人员通常将数据加载到更适合处理业务规则的业务实体中。在本示例中,以逻辑模型表示关系数据库的构架,业务实体表示概念模型。实体框架使用映射层在模型之间搭建了桥梁。因此,实体框架的模型中有三个处于活动状态的层:
1.    概念层(Conceptual layer - 表示数据的概念模型,包括实体和相互关系。
2.    逻辑层(Logical layer- 描述数据在数据库的存储模型。
3.    映射层(Mapping layer - 在概念层和逻辑层模型之间建立映射。
 
这三层允许将数据从关系数据库映射到更加面向对象的业务模型。实体框架提供了使用 XML 文件定义这些层的方法。它还基于概念模型的架构生成了一系列类。可以针对这些类进行编程以直接与数据交互。这提供了抽象级别,因此开发人员可以针对概念模型而不是关系模型进行编程。
 
下面演示如何使用Entity Framework 构建示例程序。
首先,使用Entity Data Model Wizard创建如下NorthwindDB.edml文件。



概念模型和逻辑模型视图:



 
本示例程序采用Northwind 示例数据库,下面开始编写代码对Customers表进行增、删、改、查等等操作。
 
1.新增Customers记录
            using (NorthwindEntities myDb = new NorthwindEntities())
            {
                Customers customer = new Customers();
 
                Random rm = new Random();
 
                customer.CustomerID = "A" + rm.Next(9999).ToString();
                customer.CompanyName = "EntLib.com Forum";
                customer.Address = "http://www.EntLib.com";
 
                myDb.AddToCustomers(customer);
 
                int count = myDb.SaveChanges();
 
                txtCustomerID.Text = customer.CustomerID;
            }
 
2.更新Customers记录
            using (NorthwindEntities myDb = new NorthwindEntities())
            {
                var query = from customer in myDb.Customers
                            where customer.CustomerID == txtCustomerID.Text.Trim()
                            select customer;
 
                foreach (var row in query)
                {
                    row.CompanyName = "Updated Company Name";
                }
 
                myDb.SaveChanges();
            }
 
3.删除Customers记录
            using (NorthwindEntities myDb = new NorthwindEntities())
            {
                var query = from customer in myDb.Customers
                            where customer.CustomerID == txtCustomerID.Text.Trim()
                            select customer;
 
                foreach (var row in query)
                {
                    myDb.DeleteObject(row);
                }
 
                myDb.SaveChanges();
            }
 
4.查询Customers,返回所有记录
            using (NorthwindEntities myDb = new NorthwindEntities())
            {
                dataGridView1.DataSource = myDb.Customers;
            }
 
如下的Entity Framework Demo 程序的运行界面:



 
本示例程序由http://forum.entlib.com 开源ASP.NET论坛小组提供,如有问题或疑问,欢迎访问http://forum.entlib.com 论坛。
 
下载Demo 示例程序!
 
 
 

 

 

posted @ 2008-08-23 15:22 EntLib 阅读(1732) | 评论 (2)编辑
轻松搭建免费论坛BBS-开源ASP.NET论坛EntLib.com的安装配置
 
 
开源ASP.NET论坛EntLib.com /YAF Forum 是基于.NET Framework 2.0/3.0/3.5和SQL Server 构建的免费开源论坛。EntLib.com 开源论坛小组(http://forum.entlib.com )在 YAF 英文开源论坛的基础上,进行了汉化、更新、增加了部分新的功能。
 
下面详细演示如何轻松搭建免费论坛:
 
1. 首先下载EntLib.com 开源论坛源代码。
发布EntLib.com / YAF 开源论坛 V3.0 (ASP.NET/C#) -- 提供代码下载!
http://forum.entlib.com/Default.aspx?g=posts&t=126
目前提供的最新版本为v3.0,包含新功能的新版本会不断推出,欢迎反馈你的建议。
 
2. 下载EntLib.com 开源论坛数据库。
EntLib.com Forum /YAF 开源ASP.NET/C#论坛--数据库下载!
http://forum.entlib.com/Default.aspx?g=posts&t=61
提供的数据库下载文件 – 为SQL SERVER 2005 的MDF和日志文件,只需要在SQL SERVER 2005上附加(attach)下载的数据库即可。
管理员帐号:admin / entlib.com
 
3. 修改EntLib.com 开源论坛源代码中web.config 配置文件。
EntLib.com开源论坛v3.0 源代码项目为Visual Studio 2005 Web application,您可以通过Visual Studio 2005 打开源项目,进行编辑与编译。(http://forum.entlib.com 开源论坛小组注: EntLib.com 开源论坛的后续版本升级到.Net Framework 3.5 平台,并且源项目为Visual Studio 2008 Web Application。)
<connstr>user id=USERID;pwd=PASSWORD;data source=(local);initial catalog=EntLib_BBS;timeout=90</connstr>
 
OK. 现在您可以编译EntLib.com 论坛项目了。
如下是论坛项目的演示界面:


 
如果您对EntLib.com 开源论坛有任何疑问,欢迎到http://forum.entlib.com 进行咨询,有很多爱好者会给予帮助。
 
在此感谢YAF开源论坛开发人员提供的优秀的、开源论坛系统。
 

posted @ 2008-08-18 21:07 EntLib 阅读(632) | 评论 (0)编辑
轻松搭建博客平台-开源ASP.NET 博客Subtext 的安装
 
 
开源ASP.NET博客Subtext 目前发布了最新版2.0,是基于.Net Framework 2.0/3.0的开源ASP.NET 博客系统。本文简要演示如何轻松搭建自己的博客平台(http://forum.EntLib.com 开源小组编写)。
 
1.首先下载Subtext 开源代码v2.0。
下载地址:
http://sourceforge.net/project/showfiles.php?group_id=137896/&abmode=1
Subtext v2.0 发布时间 2008-08-09。
 
2.展开zip压缩文件。
 
3.假定你已经在本地安装了MS SQL SERVER 2005数据库系统。这里只需要加载(attach)Subtext.Web项目中App_data目录下的SubtextData数据库文件。
 
4.打开Subtext 项目文件,修改Subtext.Web项目中web.config 配置文件:<connectionStrings>配置节,正确设置数据库连接。
 
现在,你可以编译Subtext 整个solution 开源代码了。
 
5.访问Install目录,本示例URL为:http://localhost:2732/install/,其中端口2732根据实际情况会有所不同。安装配置界面如下:




在本页面配置 Host Administrator 信息,Host Administrator 负责维护Subtext 的安装。Host Administrator 不是任何特定Blog 的管理员,但是可以增加、编辑和删除Blog和用户。Host Administrator 不能删除。
 
下一步,进入如下配置界面:


如果你仅仅配置一个Blog,也就是说将该Subtext 配置为支持仅一个Blog,你可以点击上述Create按钮,并输入相关信息即可。

 
6.配置Blog的相关信息。

配置示例界面如下:




 
点击Save按钮,保存该Blog配置信息。然后访问Blog,博客界面如下:
 


 
 
到此,你已经完成了Subtext 博客系统的整个安装配置过程。访问http://forum.entlib.com/ 开源ASP.NET 论坛,可以获取更多的信息。

原文链接:
http://forum.entlib.com/Default.aspx?g=posts&t=170

感谢Subtext 开发人员提供优秀的开源的Blog系统!!!

 

posted @ 2008-08-17 16:45 EntLib 阅读(306) | 评论 (2)编辑
开源ASP.NET论坛EntLib.com/YAF 定制化开发 Part 1
 
 
目前,开源ASP.NET论坛EntLib.com/YAF 已经升级到.Net Framework 3.5 平台和Visual Studio 2008。我们将根据各方用户的反馈意见,对论坛进行升级,增加更多的功能,更好地满足用户的实际需求。本开源论坛可以免费使用,同时提供项目源代码下载。
 
下面针对具体的功能,演示如何进行定制化开发。开发完成后的效果如下:



 
增加论坛帖子的设置精华(精华贴分为1、2、3个等级,采用不同的标识)、设置推荐功能:
 
1. 首先修改数据表yaf_topic 结构
增加字段 DigestLevel ApproveStatus ,字段类型为 INT ,默认值0,运行为NULL
 
2. 修改存储过程[dbo].[yaf_topic_list]
省略前面的script ......
c.PollID,
ForumFlags = d.Flags,
c.DigestLevel, // 增加DigestLevel 输出
c.ApproveStatus // 增加ApproveStatus 输出
FROM     yaf_Topic c
JOIN yaf_User b
ON b.UserID = c.UserID
省略后面的script ......
 
3. 修改TopicLine.cs 控件,增加显示-精华/推荐的标识。
 
            ////////////////////////////////////////////////////////////////////////////////////
            // updated by http://www.entlib.com/
            // updated date: 2008-08-12
            // 显示精华贴的标识
            ////////////////////////////////////////////////////////////////////////////////////
            if ( m_row["DigestLevel"] != System.DBNull.Value && Convert.ToInt32(m_row["DigestLevel"]) > 0)
            {
                html.AppendFormat("&nbsp;<img src='images/topics/digest_{0}.gif' alt='精华{0}' align='absbottom' />", m_row["DigestLevel"].ToString().Trim());
            }
 
            if (m_row["ApproveStatus"] != System.DBNull.Value && Convert.ToInt32(m_row["ApproveStatus"]) > 0)
            {
                html.Append("&nbsp;<img src='images/topics/agree.gif' alt='推荐' align='absbottom' />");
            }
            ////////////////////////////////////////////////////////////////////////////////////
 
4. 修改后台版主的管理界面 – moderate.ascx 用户控件,增加设置精华、设置推荐等等功能,只有版主才可以进行操作。
 
<asp:repeater id=topiclist runat=server>
<itemtemplate>
     <yaf:TopicLine runat="server" DataRow=<%# Container.DataItem %>>
         <td class="postheader" align="left" nowrap>
              <asp:linkbutton runat=server onload="Delete_Load" commandargument='<%# DataBinder.Eval(Container.DataItem, "TopicID") %>' commandname='delete'>删除话题</asp:linkbutton>
              | <asp:linkbutton ID="btnSetDigest" runat=server commandargument='<%# DataBinder.Eval(Container.DataItem, "TopicID")%>' CommandName='digest'>设置精华</asp:linkbutton><asp:TextBox ID="txtDigestLevel" runat="server" Width="20" Text='<%# DataBinder.Eval(Container.DataItem, "DigestLevel") %>'></asp:TextBox>&nbsp;
            | <asp:linkbutton ID="btnRecommend" runat=server commandargument='<%# DataBinder.Eval(Container.DataItem, "TopicID")%>' CommandName='recommend' Text='<%# GetRecommendOpt(Eval("ApproveStatus")) %>'></asp:linkbutton>
         </td>
     </yaf:TopicLine>
</itemtemplate>
</asp:repeater>

具体的后台实现代码可以在EntLib.com 开源ASP.NET项目中获得,新项目版本为v3.5,运行在.Net Framework 3.5平台之上,开发环境为 Visual Studio 2008。版主后台维护界面如下:



 原文链接:
http://forum.entlib.com/Default.aspx?g=posts&t=165
 
论坛演示地址:http://forum.EntLib.com 包括论坛技术问题、安装使用等等交流。
 
 
 
posted @ 2008-08-16 08:42 EntLib 阅读(1124) | 评论 (2)编辑
轻松玩转MSMQ, WCF IIS 7.0
MSMQ, WCF and IIS: Getting them to play nice
by Tom Hollander
 
Tom Hollander 先生Blog (http://blogs.msdn.com/tomholl/default.aspx )上的文章《MSMQ, WCF and IIS: Getting them to play nice》。http://www.EntLib.com 全力推荐 – WCF/MSMQ/IIS 7.0 构建企业级可靠的、异步的、消息应用方案。
 
方案的设计目标是在Client/Server端建立可靠的、异步的通信。系统采用MSMQ作为传输机制,因为MSMQ支持可靠的队列通信。MSMQ部署在三方Server上(一般集群部署,避免单点故障)。Client端应用程序使用WCF的NetMsmqBingding 来发送消息到MSMQ Server的私有队列。Service 服务程序将部署在IIS 7.0,并采用Windows Activation Services(WAS)来监听消息队列上的新消息。通过SMSvnHost.exe – Windows 服务程序来实现监听,当有消息到达时,它负责在IIS Worker process激活service服务,然后service服务将处理消息。整体的架构如下所示:
 
 
  • Part 1部分,演示创建一个Client程序和部署在IIS 7.0 的Service服务,接着Client/Server 采用WCF的NetMsmqBinding绑定,通过MSMQ进行通信。
http://blogs.msdn.com/tomholl/archive/2008/07/12/msmq-wcf-and-iis-getting-them-to-play-nice-part-1.aspx
  • Part 2部分,将Part 1中相同的应用程序进行跨多Server进行部署,同时启动MSMQ的传输安全特性。
http://blogs.msdn.com/tomholl/archive/2008/07/13/msmq-wcf-and-iis-getting-them-to-play-nice-part-2.aspx
  • Part 3部分,进一步开启事务性队列,确保消息不会丢失。
http://blogs.msdn.com/tomholl/archive/2008/07/14/msmq-wcf-and-iis-getting-them-to-play-nice-part-3.aspx

 

 

 

 

posted @ 2008-08-12 19:55 EntLib 阅读(1961) | 评论 (12)编辑
在BizTalk Server 2006 R2 中调用 WCF Services – Part 3


前一部分文章:
在BizTalk Server 2006 R2 中调用 WCF Services – Part 1
在BizTalk Server 2006 R2 中调用 WCF Services – Part 2


3. 部署BizTalk 项目
在确保BizTalk 编译通过后,设置必要的BizTalk 项目属性,然后发布项目。如下是BizTalk Administration窗口:



 
下面导入前面WCF Consume Service 向导产出的端口绑定文件,如下图所示。分别选择第一个、第二个绑定文件,逐步导入。



 
其中一个端口采用WCF-WSHttp 作为传输类型,另一个端口采用WCF-Custom 作为传输类型。如下图所示:







 
现在,整个BizTalk 项目已经全部完成。下面采用如下的Message 作为测试:
<ns0:Rootxmlns:ns0="http://BizTalkDemo.msgAccount">
 <ID>ID_0</ID>
 <Name>EntLib.com</Name>
 <Age>28</Age>
</ns0:Root>
 
Orchestration 流程同时调用AddAccount方法和GetAccounts方法。在开始测试之前,需要先启动 WCF Services,然后启动BizTalk项目,并传入测试消息。如下是测试结果:



 
《在BizTalk Server 2006 R2 中调用 WCF Services》 系列文章已经全部完成 – EntLib.com BizTalk 小组。
 
欢迎到http://forum.entlib.com BizTalk 论坛交流分享。
 
 
****
本演示项目源码下载:
WCF 简单示例程序(源码下载) 
BizTalk 示例程序(源码下载)
 
 
 
 
 
posted @ 2008-08-07 21:05 EntLib 阅读(1055) | 评论 (1)编辑
在BizTalk Server 2006 R2 中调用 WCF Services – Part 2


前一部分文章:
在BizTalk Server 2006 R2 中调用 WCF Services – Part 1


2. 构建BizTalk Orchestration 流程
在BizTalk Orchestration 流程中,我们定义如下的流程,演示如何通过WCF Adapter调用 WCF Services中的方法。


 
这里,演示了调用WCF Services 的 AddAccount方法和GetAccounts方法。
 
在调用WCF Services 的AddAccount 方法之前,需要准备好要传入的参数,示例中采用BizTalk Map 进行消息的转换。



 
在调用WCF Services 的GetAccounts 方法之前,也需要准备好要传入的参数,示例中采用Message Assignment / Biztalk 表达式编辑器进行消息的构造。示例代码如下:
 
System.Diagnostics.EventLog.WriteEntry(" === start to build msgGetAccounts === ", "start");
 
xmlDoc = new System.Xml.XmlDocument();
xmlDoc.LoadXml("<ns0:GetAccounts xmlns:ns1=\"http://schemas.microsoft.com/2003/10/Serialization/Arrays\" xmlns:ns0=\"http://Microsoft.ServiceModel.Samples\"> </ns0:GetAccounts>");
msgGetAccounts.parameters = xmlDoc;
 
System.Diagnostics.EventLog.WriteEntry(" === end === ", "end");
 
在上述BizTalk Orchestartion 流程图右边的Port 端口,是WCF Services 的逻辑端口,在导入WCF Services 元数据的过程中产生的。




 
下一步将演示如何部署BizTalk 项目,配置WCF Adapter,并演示对 WCF Services 的调用。
 
欢迎到 http://forum.entlib.com BizTalk 论坛交流分享。
 

posted @ 2008-08-04 23:41 EntLib 阅读(1055) | 评论 (2)编辑
在BizTalk Server 2006 R2 中调用 WCF Services – Part 1
 
 
本篇文章演示如何在BizTalk Server 2006 R2 项目中通过新增的WCF Adapter调用WCF Services。(This post shows you how to consume WCF Services via new WCF Adapter in BizTalk Server 2006 R2)
 
示例应用方案:假定你已经设计、实现并部署了WCF Services。现在你想在BizTalk Orchestration 流程中发送/接收消息给WCF Services。BizTalk 通过WCF Adapter 与 WCF 应用程序通信,这些可以通过在BizTalk 中配置发送和接收端口。这篇文章主要演示如何通过BizTalk consume WCF 向导来简化端口的创建,尤其是建立WCF 方法和SOAP Actions之间的映射,或者是端口配置文件。
 
原文链接:在BizTalk Server 2006 R2 中调用 WCF Services – Part 1
 
首先,建立假设你已经建立、并部署好了WCF Services。这里,使用如下的WCF service(提供WCF 演示项目源代码下载!)



 
下面是通过C# Application 调用上述WCF Service 的运行情况:
 

 
1. 使用WCF Services Consume 向导调用WCF Services
通过这一向导,你可以基于WCF Services描述文件,创建Schema 文件和 Port binding configuration 文件,这些文件是BizTalk 项目所必须的。
在BizTalk 项目项目中,选择增加“Add Generated Items”,弹出如下窗口:
 


 
选择从正在运行的WCF Service 产生Metadata(http://forum.entlib.com BizTalk 小组注:需要启动WCF Services),窗口如下所示:



 
点击 Next 按钮,在接下来的窗口中,输入WCF Metadata Address,用来生成Metadata数据:
 


 
点击 Next 按钮,在接下来的窗口中,输入Namespace:



最后,点击Import 按钮,导入Schema 相应的端口绑定文件到BizTalk 项目中。Schema 文件是基于调用的WCF Services 元数据生成的,可以作为后续request/response servicesmultipart messages。下面是BizTalk 项目中生成的BizTalk Schema 文件:





 
现在,我们已经完成了在BizTalk 项目中导入WCF Services 相关的Schema 和WCF 端口绑定文件。
 
接下来的文章中,我们将演示如何构建BizTalk Orchestration,以及如何在Orchestration 流程中使用Schema 消息,如何与WCF Adapter 交互等等。
 
欢迎到http://forum.entlib.com BizTalk 论坛交流分享。

 

 

 

posted @ 2008-08-03 10:36 EntLib 阅读(717) | 评论 (1)编辑

WCF 简单示例程序(源码下载)


本示例程序演示如何编写一个简单的WCF 示例程序。

示例WCF 项目源码下载

如何使用WCF 示例代码:
Server 端:Console 程序,WCF Service 承载在Console 程序中。

    [ServiceContract(Namespace = "http://microsoft.servicemodel.samples/")]
    public interface IBankService
    {
        [OperationContract]
        int AddAccount(string clientName, int clientAge);
        [OperationContract]
        bool RemoveAccount(int accountNumber);
        [OperationContract]
        List<String> GetAccounts();
    }

    class BankService: IBankService
    {
        private List<Account> _accounts = new List<Account>();
        private int _idGenerator = 0;

        public int AddAccount(string clientName, int clientAge)
        {
            Console.WriteLine(OperationContext.Current.SessionId);

            _idGenerator++;
            Account acc = new Account(_idGenerator, clientName, clientAge);
            _accounts.Add(acc);
            Console.WriteLine("ADD - " + acc.ToString());
            return _idGenerator;
        }
......

Client 端: 也是一个Console 程序,负责调用/测试 WCF Services。
            using (ChannelFactory<IBankService> bankFactory =
               new ChannelFactory<IBankService>("MyClient"))
            {
                IBankService bankProxy = bankFactory.CreateChannel();

                Console.WriteLine("Adding John , 20 years");
                bankProxy.AddAccount("John", 20);
                Console.WriteLine("Adding Peter , 21 years");
                bankProxy.AddAccount("Peter", 21);
                Console.WriteLine("Adding Andrew , 25 years");
                bankProxy.AddAccount("Andrew", 25);

                DisplayAccounts(bankProxy.GetAccounts());

                Console.WriteLine("Removing John");
                bankProxy.RemoveAccount(1);

                DisplayAccounts(bankProxy.GetAccounts());


                Console.WriteLine();
                Console.WriteLine("Press <Enter> to close");
                Console.ReadLine();
            }

运行WCF 示例项目:

启动WCF Server 端 Console 程序,运行界面如下:



下面是通过C# Application 调用上述WCF Service 的运行情况:




恭喜!你现在已经完成了一个WCF Service 程序!

posted @ 2008-08-03 08:16 EntLib 阅读(222) | 评论 (0)编辑
ASP.NET 3.5 新特性开发向导实践(附项目源码下载)- Part 2


上一部分内容:
ASP.NET 3.5 新特性开发向导实践(附项目源码下载)- Part 1

5. 设置LinqDataSource 控件的EnableInsert 属性 - EnableInsert=”True”
然后增加ListView 的Insert Item Template (注:InsertItemTemplate 有可能在前面的过程中自动生成)。
        <InsertItemTemplate>
            <span style="">CustomerID:
                <asp:TextBox ID="CustomerIDTextBox" runat="server" Text='<%# Bind("CustomerID") %>' />
                <br />
                CompanyName:
                <asp:TextBox ID="CompanyNameTextBox" runat="server" Text='<%# Bind("CompanyName") %>' />
                <br />
                ContactName:
                <asp:TextBox ID="ContactNameTextBox" runat="server" Text='<%# Bind("ContactName") %>' />
                <br />
                ContactTitle:
                <asp:TextBox ID="ContactTitleTextBox" runat="server" Text='<%# Bind("ContactTitle") %>' />
                <br />
                Address:
                <asp:TextBox ID="AddressTextBox" runat="server" Text='<%# Bind("Address") %>' />
                <br />
                City:
                <asp:TextBox ID="CityTextBox" runat="server" Text='<%# Bind("City") %>' />
                <br />
                Region:
                <asp:TextBox ID="RegionTextBox" runat="server" Text='<%# Bind("Region") %>' />
                <br />
                PostalCode:
                <asp:TextBox ID="PostalCodeTextBox" runat="server" Text='<%# Bind("PostalCode") %>' />
                <br />
                Country:
                <asp:TextBox ID="CountryTextBox" runat="server" Text='<%# Bind("Country") %>' />
                <br />
                Phone:
                <asp:TextBox ID="PhoneTextBox" runat="server" Text='<%# Bind("Phone") %>' />
                <br />
                Fax:
                <asp:TextBox ID="FaxTextBox" runat="server" Text='<%# Bind("Fax") %>' />
                <br />
                <asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="Insert" />
                <asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Clear" />
                <br />
                <br />
            </span>
        </InsertItemTemplate>
同时设置ListView 控件的InsertItemPosition 属性为:FirstItem




 
6. 分页
设置ListView 的分页属性,脚本如下:
<asp:DataPager ID="DataPager1" runat="server" PageSize="5">
<Fields>
<asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowLastPageButton="True" />
</Fields>
</asp:DataPager>
上述脚本设置PageSize=5
 
 
7. ASP.NET AJAX 的使用
最后,我们增加AJAX功能,实现在增加记录时,局部更新页面,而不是重新load整个页面。
Visual Studio 2008 已经内置了ASP.NET AJAX Library 类库,因此我们只需要展开AJAX Extensions,拖拉 ScriptManager 和 UpdatePanel 控件到页面。ScriptManager 控件负责装载ASP.NET AJAX 所需要的JavaScript 类库。UpdatePanel 则包含整个ListView 脚本。示例代码如下:
<asp:UpdatePanel runat="server">
    <ContentTemplate>
        这里是ListView 控件的脚本
    </ContentTemplate>
</asp:UpdatePanel>
 
OK. 现在我们完成了整个示例程序,几乎没有手动编写代码。上述只是演示了ASP.NET 3.5 部分新功能和新特性。欢迎交流、分享 http://forum.EntLib.com 论坛。
 
本示例开发软件:Visual Studio 2008 和 SQL SERVER,使用Northwind 示例数据库的Customers表。

 

下载演示项目源代码

 

 

 

posted @ 2008-07-31 22:26 EntLib 阅读(1244) | 评论 (1)编辑
ASP.NET 3.5 新特性开发向导实践(附项目源码下载)- Part 1
 
 
本篇文章将演示ASP.NET 3.5 部分新功能、新特性,包括LINQ、ListView控件、LinqDataSource、DataPager 分页控件、ASP.NET AJAX等等。
 
下载演示项目源码! 
 
1. 创建Web Application – EntLib.com.NewFeatureDemo
2. 增加新的项目文件,选择 LINQ to SQL Classes,命名为 Customers.dbml,如下图所示:



接着打开 Server Explorer,并连接到Northwind 示例数据库,拖放 Customers 表到工作区。如下图所示:



 
保存文件。此时,你可以发现自动生成的代码文件:Customers.designer.cs 文件,包含如下类的定义:
public partial class CustomersDataContext : System.Data.Linq.DataContext
 
3. 下面是LinqDataSource 的使用。
首先将LinqDataSource 控件拖放到 Web Form 中,自动生成的脚本如下:
    <asp:LinqDataSource ID="linqDSCustomers" runat="server">
    </asp:LinqDataSource>
 
在设计窗口,选择 Configure Data Source ,如下图所示:

在弹出窗口中,选择“