首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WF4.0 實戰(十九):Silverlight + WCF + WF + Linq 整合應用範例

     編輯:關於.NET

展示 WF4 如何使用 WCF 服務,並由 Silverlight 非同步呼叫,後端以 Linq to SQL 存取 Northwind 資料庫,呈現三層級聯 (客戶 → 訂單 → 明細)。

專案結構

四個專案結構
  • DataOperate:Linq 實體類別
  • MyFirstSilverlight:Silverlight UI
  • MyFirstSilverlight.Web:ASP.NET 宿主
  • WFService:WCF Workflow Service 實作業務邏輯

WFService 實作核心

使用 Pick 活動提供多個服務端點,每分支對應一個 ReceiveAndSendReply:

建立 WCF Workflow Service Pick 活動三個分支

三個自訂 CodeActivity

// 取得所有客戶
public sealed class GetCustomersActivity : CodeActivity
{
    public OutArgument<List<Customer>> CustomerList { get; set; }
    protected override void Execute(CodeActivityContext context)
    {
        var dc = new DataClasses1DataContext();
        CustomerList.Set(context, dc.Customers.ToList());
    }
}

// 依客戶 ID 取得訂單
public sealed class GetOrdersActivity : CodeActivity
{
    public InArgument<string> customerID { get; set; }
    public OutArgument<List<Order>> OrderList { get; set; }
    protected override void Execute(CodeActivityContext context)
    {
        var dc = new DataClasses1DataContext();
        var id = customerID.Get(context);
        OrderList.Set(context, dc.Orders.Where(o => o.CustomerID == id).ToList());
    }
}

// 依訂單 ID 取得明細
public sealed class GetOrderDetailsActivity : CodeActivity
{
    public InArgument<int> orderID { get; set; }
    public OutArgument<List<Order_Detail>> OrderDetailList { get; set; }
    protected override void Execute(CodeActivityContext context)
    {
        var dc = new DataClasses1DataContext();
        var id = orderID.Get(context);
        OrderDetailList.Set(context, dc.Order_Details.Where(d => d.OrderID == id).ToList());
    }
}

Receive 設定與 SendReply 建立

Receive 活動設定 三個活動放入對應 Action 右鍵建立 SendReply

Silverlight 非同步呼叫

private void lstCustomers_Loaded(object sender, RoutedEventArgs e)
{
    var svc = ServerManager.GetPox();
    txtStatus.Text = "Loading customers...";
    svc.GetCustomersCompleted += svc_GetCustomersCompleted;
    svc.GetCustomersAsync();
}

void svc_GetCustomersCompleted(object sender, GetCustomersCompletedEventArgs e)
{
    if (e.Error == null)
    {
        lstCustomers.ItemsSource = e.Result;
        txtStatus.Text = string.Empty;
    }
    else
        txtStatus.Text = "Error loading customers...";
}
Silverlight 加入服務參考

原始碼:MyFirstSilverlight.rar

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved