關鍵字:Web Services Software Factory,Data Contracts,Business Entities
如果你已經錯過了本系列的第一部分,請單擊這裡。您將需要完成的第一部分的教程,安裝和設定好您的環境。在這部分您將建立的資料契約、服務契約及業務實體。就像典型的web services,您應該只關注您的商務邏輯和業務實體。以構建自己的WCF。我們繼續,載入您的MyCryptographyService解決方案項目。
按右鍵MyCryptographyService.model項目(注意,不是解決方案,而是下面帶小表徵圖的),並選擇Add –> New Model。
選擇建立一個新的“Data Contract Model”(資料契約模組) 。填寫Mode name(模組名稱)為CryptographyService.DataContracts和XML Namespace(XML命名空間)為http://www.cnblogs.com/LiYunQi/ 。
你現在應該有一個空白的設計地區。並且右側將出現新的Data Contract Exploeer 視窗。點擊該空白色設計地區,然後查看屬性視窗。單擊“Implementation Technology”,並選擇“WCF Extension” 。
您還需要設定 Project Mapping table項目映射表的合約。這是XML文檔(預設情況下,在ProjectMapping.xml,標記了 WSSF中作用於每一個項目和自動產生代碼的說明。此檔案可以編輯和修改)。設定Project Mapping table為我們剛剛建立的MyCryptographyService 。
開啟左側的工具箱,您會發現適應當前設計地區的一些工具,包括用於可序列化對象的Data Contract(資料契約)。用於枚舉類型的Data Contract Enumeration(資料契約枚舉)。用於NET資料類型的Primitive Data Type Collections(未經處理資料類型)。用於Data Contract Collections(資料契約集合)。用於異常的Fault Contracts(故障契約)等。
接下來您需要從工具箱中將一個Data Contract Enumeration”(資料合約枚舉)拖動到設計地區。單擊頂端上的名稱(預設是DataContractEnum1 ) ,並改名為HashType 。按右鍵並選擇添加- > Value 分別添加MD5和SHA256的枚舉。
拖曳另一資料契約枚舉到設計地區,並將其命名為EncryptionAlgorithm1 。添加兩個值為DES和Rijndael演算法的枚舉。當您完成時您設計地區應該是這個樣子。
現在,從工具箱上拖動一個“Data Contract”到設計地區。改名為HashObject以相同的方式重新命名列舉。按右鍵添加新的Primitive Data Type。此屬性名稱“StringToHash”。
讓我們現在就看看你剛剛添加的Primitive Data Type。它有一個Type屬性是System.String及order屬性為0 。今後可以在這裡添加、修改這些屬性,現在我們可以接受預設值。
現在,從工具箱選擇Aggregation工具,然後按一下HashType枚舉,按住滑鼠按鍵,拖動串連到HashObject 。HashObject將建立一個新的HashType。設定其order為1 。
在設計地區,您的HashObject和HashType看起來應該如所示。
您還應該通過拖動建立另一個“Data Contract”,命名為 EncryptionObject。添加Text member 建立好與EncryptionType關聯。當您完成時,你應該有這四個對象在您的設計地區。
按右鍵空白設計地區的任何地區,並點擊“全部驗證” 。應該沒有任何錯誤。否則,請檢查上述操作步驟。
下一步,右鍵點擊一些空白,並點擊“Generate Code”。
在MyCryptographyService.DataContracts項目(在解決方案檔案夾Service Interface下)的“Generated Code”檔案夾中你會發現,一些類庫項目已經產生。請記住,每當您更改您的資料契約,這些類庫項目及自動產生的程式碼將被覆蓋。
按右鍵MyCryptographyService.BusinessEntities類庫項目(Business Logic解決方案檔案夾下),並添加一個類。命名為CryptographicEntities.cs 。在這個檔案中,我們將確定所有的商務邏輯實體的資料模型,使他們能夠在其他地方使用我們的解決方案。通常,你會採取一些你自己的方式來構建業務實體層,本教程中請用以下代碼來替換。CryptographicEntities.cs (using部分除外)以下為代碼。
namespace MyCryptographyService.BusinessEntities{ public enum EncryptionAlgorithm { DES = 0, Rijndael = 1 } public enum HashType { MD5 = 0, SHA256 = 1 } public class EncryptionObject { public string Text { get; set; } public EncryptionAlgorithm EncryptionAlgorithm { get; set; } } public class HashObject { public string StringToHash { get; set; } public HashType HashType { get; set; } }}
現在,右鍵點擊MyCryptographyService.ServiceImplemenation項目,並選擇“Create Translator”。
在First Class to map,選擇DataContracts.EncryptionObject 。在Second Class to map,選擇BusinessEntities.EncryptionObject 。Mapping class name 輸入EncryptionObjectTranslator ,Mapping class XNL namespace保持MyCryptographyService.ServiceImplementation 。
在每一個列表框中選擇Text屬性,並單擊map。然後單擊完成。你不能手動修改map對話方塊產生的手動。只要你不在此運行“Create Translator”,您不必擔心覆蓋手動更改。事實上,我建議一旦你的指導方針和維護手動這樣。
重複此過程,這次我們選擇HashObjects 。Mapping class name 輸入HashObjectTranslator ,在每一個列表框中選擇圖StringToHash屬性。下一步,開啟MyCryptographyService.ServiceImplementation項目下產生的程式碼。應該如下所示: (請注意,我的命名空間別名,使其短,容易與) 。
HashObjectTranslator:
using System;using MyCryptographyService.DataContracts;using MyCryptographyService.BusinessEntities;namespace MyCryptographyService.ServiceImplementation{ public static class HashObjectTranslator { public static MyCryptographyService.DataContracts.HashObject TranslateHashObjectToHashObject(MyCryptographyService.BusinessEntities.HashObject from) { MyCryptographyService.DataContracts.HashObject to = new MyCryptographyService.DataContracts.HashObject(); to.StringToHash = from.StringToHash; return to; } public static MyCryptographyService.BusinessEntities.HashObject TranslateHashObjectToHashObject(MyCryptographyService.DataContracts.HashObject from) { MyCryptographyService.BusinessEntities.HashObject to = new MyCryptographyService.BusinessEntities.HashObject(); to.StringToHash = from.StringToHash; return to; } }}
EncryptionObjectTranslator:
using System;using MyCryptographyService.DataContracts;using MyCryptographyService.BusinessEntities;namespace MyCryptographyService.ServiceImplementation{ public static class EncryptionObjectTranslator { public static MyCryptographyService.DataContracts.EncryptionObject TranslateEncryptionObjectToEncryptionObject(MyCryptographyService.BusinessEntities.EncryptionObject from) { MyCryptographyService.DataContracts.EncryptionObject to = new MyCryptographyService.DataContracts.EncryptionObject(); to.Text = from.Text; return to; } public static MyCryptographyService.BusinessEntities.EncryptionObject TranslateEncryptionObjectToEncryptionObject(MyCryptographyService.DataContracts.EncryptionObject from) { MyCryptographyService.BusinessEntities.EncryptionObject to = new MyCryptographyService.BusinessEntities.EncryptionObject(); to.Text = from.Text; return to; } }}
現在您應該能夠成功地產生您的項目並為第3部分做好了準備。如果您有任何問題,請留下您的評論,我會儘快回複您。下一步,我們將建立和實現服務契約。
Web服務軟體工廠(WSSF)演練之三:建立服務契約和實現方法