Silverlight+WCF+WF+Linq结合的一个示例【附示例源码下载】 _C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > Silverlight+WCF+WF+Linq结合的一个示例【附示例源码下载】

Silverlight+WCF+WF+Linq结合的一个示例【附示例源码下载】

 2011/10/21 7:51:43  sty2008boy  http://alecrichard009.iteye.com  我要评论(0)
  • 摘要:原文:http://www.aspxcs.net/HTML/0009332123.html这个Demo主要是为了阐述WF4中是如何使用WCF服务的,以及如何在Silverlight中调用WCF服务。因为即使用了Silverlight呈现UI,又用Linq访问数据库。故本文的名字为:“Silverlight+WCF+WF+Linq结合的一个示例”。如果你和我一样,对WCF有点了解,就知道WCF能将很多方法放在一Uri中供大家调用。那如何将多个WF流程放在一个Uri中供你调用呢?很简单
  • 标签:Silverlight 源码 下载 一个 结合 WCF
原文:http://www.aspxcs.net/HTML/0009332123.html

这个Demo主要是为了阐述WF4中是如何使用WCF服务的,以及如何在Silverlight中调用WCF服务。因为即使用了Silverlight呈现UI,又用Linq访问数据库。故本文的名字为:“Silverlight+WCF+WF+Linq结合的一个示例”。如果你和我一样,对WCF有点了解,就知道WCF能将很多方法放在一Uri中供大家调用。那如何将多个WF流程放在一个Uri中供你调用呢?很简单,使用一个Pick活动,Pick活动中可以有多个分支,这种方式是非常有用的。对于Pick的每一个分支,你都可以设计一个流程。好了,先看一下这个Demo实现了什么功能,在说如何实现,最后总结,附代码下载。

效果:

     就是一个Silverlight的数据显示的界面,使用了northwnd数据库。左边显示所有的客户。右边上面是你选择顾客的订单。右边的下面是这个订单的详细情况。效果有点类似三级级联。



实现:

    这个Demo一共有四个项目,如下图:



项目说明:

    1、DataOperate:主要是linq生成的代码,用于数据库操作。

    2、MyFirstSilverlight:Silverlight项目,用于显示UI。

    3、MyFirstSilverlight.Web:asp.net项目,用于宿主Silverlight。

    4、WFService:把WF+WCF的项目,用于实现业务逻辑。

    我深信WCF+WF功能是十分强大的。本文只讲述一下WCF+WF结合的WFService是如何实现的。Silverlight和Linq的部分,详细见代码。

WFService实现:

    在Workflow模板下面,选择新建一个WCF Workflow Service,命名为WFService。



     在Service1.xamlx中删除原有的活动,拖放一个Pick活动,并添加三个分支,如下图。



    新建三个CodeActivity,分别命名为:GetCustomersActivity、GetOrderDetailsActivity、GetOrdersActivity。

    1、GetCustomersActivity:代码如下:

public sealed class GetCustomersActivity : CodeActivity 
    { 
        public OutArgument<List<Customer>> CustomerList { get; set; } 
 
        protected override void Execute(CodeActivityContext context) 
        { 
            DataClasses1DataContext datacontext = new DataClasses1DataContext(); 
            CustomerList.Set(context, datacontext.Customers.ToList()); 
        } 
    } 
这个活动返回所有的顾客资料。
    2、GetOrdersActivity代码如下:

public sealed class GetOrdersActivity : CodeActivity 
    { 
        public OutArgument<List<Order>> OrderList { get; set; } 
 
        public InArgument<string> customerID { get; set; } 
 
        protected override void Execute(CodeActivityContext context) 
        { 
            DataClasses1DataContext datacontext = new DataClasses1DataContext(); 
            OrderList.Set(context,(from order in datacontext.Orders 
                    where order.CustomerID == customerID.Get(context) 
                    select order).ToList()); 
        } 
    } 
这个活动返回顾客为customerID的所有订单。
    3、GetOrderDetailsActivity代码如下

public sealed class GetOrderDetailsActivity : CodeActivity 
    { 
        public OutArgument<List<Order_Detail>> OrderDetailList { get; set; } 
        public InArgument<int> orderID { get; set; } 
 
        protected override void Execute(CodeActivityContext context) 
        { 
            DataClasses1DataContext datacontext = new DataClasses1DataContext(); 
            OrderDetailList.Set( context,(from orderdetail in datacontext.Order_Details 
                    where orderdetail.OrderID == orderID.Get(context) 
                    select orderdetail).ToList()); 
        } 
    } 
这个活动返回订单编号为orderID的订单详情。
    下面我们将这三个方法放在WF中流程中。
    在Pick的Trigger中拖三个Receive活动,设置如下图:



方法的具体使用Linq的访问数据库的实现还是在GetCustomersActivity、GetOrderDetailsActivity、GetOrdersActivity中,将这三个活动,拖入相应的Action中。



创建方法的返回值:右击Receive活动,选择Create SendReply。这是会提示你已经将SendReply复制到剪贴板中,你只需把它们粘贴到相对的地方。如下图:



这样我们就定义好了这个WCF和WF的服务。
    在Silverlight项目中,选择添加服务引用,如下图:



在MainPage.xaml.cs中添加下面代码:

using MyFirstSilverlight.ServiceReference; 
Silverlight中调用WCF服务,与普通的不同,不是直接调用,而是异步调用,见下面代码:

private void lstCustomers_Loaded(object sender, RoutedEventArgs e) 
        { 
            Service1Client svc = ServerManager.GetPox(); 
            this.txtStatus.Text = "Loading customers..."; 
            svc.GetCustomersCompleted += new 
              EventHandler<GetCustomersCompletedEventArgs>(svc_GetCustomersCompleted); 
            svc.GetCustomersAsync(); 
        } 
 
        void svc_GetCustomersCompleted(object sender, GetCustomersCompletedEventArgs e) 
        { 
            if (e.Error == null) 
            { 
                this.lstCustomers.ItemsSource = e.Result; 
                this.txtStatus.Text = string.Empty; 
            } 
            else 
            { 
                this.txtStatus.Text = 
                    "Error occured while loading customers from database"; 
            } 
        } 
总结:
    这篇文章主要阐述了如何在WF中使用WCF服务。以及如何在Silverlight中调用WCF服务。

-
  • 20105280849.rar (3 MB)
  • 下载次数: 1
发表评论
用户名: 匿名