程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WF4.0實戰(二十四) WF4定制個性化的WebService

WF4.0實戰(二十四) WF4定制個性化的WebService

編輯:關於.NET

概述:

用WF也可以處理網站的業務邏輯,有一個非常好的開源項目:Dropthings,它就是用WF去處理網站的業務邏輯的。這篇文章中,我也將 實現一個站點,這個站點使用WF4去處理復雜的業務邏輯。

首先說明一下這個程序的主要功能。日常生活中,我們會大量的使用webservice。比如查天氣預報、查看火車時刻表、航班等等。這個 程序是把你自己常用的webservice放在一起,共你使用。在大家的網站中可能有一樣的功能了,不過你們實現此類似的功能一般都是通過硬 編碼去實現的。這篇文章中,我將通過WF4是實現一個可定制化的、通用的、個性化的、動態的WebService服務程序,下面先看效果。

效果:

啟動頁面:這裡我提供三個方法供你調用,第一個是檢測QQ是否在線,第二個是根據城市查詢天氣預報,第三個是根據站名查詢火車時 刻表,如下圖所示。

根據選擇動態的生成webserivice需要的參數表單頁面:選擇查詢火車時刻表這項服務動態生成調用頁面,如下圖。

調用WebService:填寫需要的參數,查詢深圳到上海的火車,點擊提交。

查詢深圳的天氣情況:

查詢一個QQ號碼是否在線:

優點:

之所以用WF4去做,因為有2個很大的優點。

首先:當你將WebService引入到你的Visual Studio中之後,生成一下 ,WebService公布的方法就變成了WF4中的活動,你可以在WF4設計器上任你設計了。例如下圖:我在WF4應用程序中引入了4個網絡上的 WebService,必須先生成一下,然後在工具欄上就顯示了這4個webserivice中的所有方法:

在上圖中Visual Studio中引入4個webserivice。

上圖是圖一中引入的Webserivice中的所有方法。

其次:通過強大的WF4流程設計器去設計業務邏輯。這裡我以簡單的QQ狀態查詢為例。

本程序中QQ在線的Web Service地址是http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx,引用這個webservice之後, 編譯一下,在工具欄上回多出一個qqCheckOnline活動,我們將其拖放到flowchart工作流設計器上,如下圖,在屬性框上我們可以看到這個 WebService服務中qqCheckOnline方法需要的參數和它的返回值。

它需要輸入參數:QQ號碼 String,默認QQ號碼:8698053。返回數據:String,Y = 在線;N = 離線;E = QQ號碼錯誤;A = 商業用戶 驗證失敗;V = 免費用戶超過數量。

它只返回Y、N、E、A、V,WF4需要實現一個簡單的業務轉換,將Y、N、E、A、V轉換成在線、離線、QQ號碼錯誤、商業用戶驗證失敗、免 費用戶超過數量。下面我使用一個WF4內置的一個Switch活動實現這個轉換,如下圖。

上面是WF4的兩個很大的優點。

關鍵點:

下面我將敘述一下實現的關鍵點:

1、aspx的頁面時動態生成的,如果你想添天其他的webserivice,你只要修改處理業務的WF4的流程即可。如果WF4流程存放在DB中,可 以無需編譯。動態表單生成的代碼如下:

private void CreateControl()
{
   if (ViewState["CreateControl"] == null) return;
   //獲取webserivice中方法的基本信息
   Dictionary<string, object> workflowParam = new Dictionary<string, object>();
   Dictionary<string, string> commandParam = new Dictionary<string, string>();
   commandParam.Add("commandName", "getServiceBaseInfo");
   commandParam.Add("serviceName", ddlServiceName.Text);
   workflowParam.Add("commandParam", commandParam);
   IDictionary<string, object> result = WorkflowInvoker.Invoke(new MainFlowChart(),  workflowParam);

   //創建參數表單
   string[] services = result["resultString"].ToString().Split(';');
   resultString.Value = result["resultString"].ToString();
   string[] param1 = services[0].Split(':');
   string[] param2 = param1[1].Split(',');
   for (int x = 0; x < param2.Length; x++)
   {
     //創建新一行
     TableRow row = new TableRow();
     //創建一個單元格存放label
     TableCell cell = new TableCell();
     //創建一個單元格存放TextBox
     TableCell cell2 = new TableCell();
     //創建一個label
     Label lb = new Label();
     lb.Text = param2[x];
     //創建一個textbox
     TextBox tb = new TextBox();
     tb.ID = param2[x];
     cell.Controls.Add(lb);
     cell2.Controls.Add(tb);
     row.Cells.Add(cell);
     row.Cells.Add(cell2);
     HolderTable.Rows.Add(row);
   } 
   //創建提交按鈕
   TableRow rowbtn = new TableRow();

   TableCell cellbtn = new TableCell();

   Button btnOK = new Button();
   //綁定button事件 
   btnOK.Click += new EventHandler(bt_Click);
   btnOK.Text = "提交";
   cellbtn.Controls.Add(btnOK);
   rowbtn.Cells.Add(cellbtn);
   HolderTable.Rows.Add(rowbtn);

}

2、WF4流上面有4個分支。

第一個分支用於獲取所有的WebService的名字。

第二個分支用於根據服務中的方法名字,獲取WebService中方法的參數和返回值的類型,在aspx端根據這些數據來動態生成表單頁面。

第三個分支用於調用QQ是否在線webservice中的方法。

第四個分支用於調用根據城市名獲取webserivice的方法

第五個分支用於調用火車時刻表的方法。

如果你想增加調用查看飛機航班的wenserivice服務,那就很簡單了,增加一個分支就差不多了。無需改動aspx頁面的代碼。

整個處理邏輯如下圖:

WebService調用:

上圖的就是我們的個性化的WebService。看下我們如何去調用這個包含其他很多其他WebService的服務。

得到QQ在線狀態:

Dictionary<string, string> commandParam = new Dictionary<string, string>();
commandParam.Add("commandName", "qqCheckOnline");
commandParam.Add("QQCode", "394403011");
workflowParam.Add("commandParam", commandParam);
IDictionary<string, object> result = WorkflowInvoker.Invoke(new MainFlowChart(), workflowParam);

火車時刻查詢:

Dictionary<string, string> commandParam = new Dictionary<string, string>();
commandParam.Add("commandName", "qqCheckOnline");
commandParam.Add("StartStation", "深圳");
commandParam.Add("ArriveStation", "上海");
commandParam.Add("UserID", "");
workflowParam.Add("commandParam", commandParam);
IDictionary<string, object> result = WorkflowInvoker.Invoke(new MainFlowChart(),  workflowParam);

總結:

主要是想演示一下用WF如何去處理網站的業務邏輯。這篇文章首先教你如何在wf4中調用webserivice;還有使用WF4對調用web serivice 的結果進行了處理,如果你有興趣,不寫代碼將調用天氣預報的webserivice的結果在WF4設計器中進行處理一下;還有就是簡單的動態表單 個構建;還有就是這個程序將多個webserivice聚合在一起,實現了個性化的webserivice;還可以將這個處理邏輯放在wf4的 wcf服務中, 將其發布成一個真正的webserivice。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved