年过半百的老李头

知足、感恩、平常心

导航

Web服务软件工厂(WSSF)演练之二:创建数据契约和实现业务实体

关键字:Web Services Software Factory,Data Contracts,Business Entities

如果你已经错过了本系列的第一部分,请单击这里。您将需要完成的第一部分的教程,安装和设置好您的环境。在这部分您将创建的数据契约、服务契约及业务实体。就像典型的web services,您应该只关注您的业务逻辑和业务实体。以构建自己的WCF。我们继续,载入您的MyCryptographyService解决方案项目。

右键单击MyCryptographyService.model项目(注意,不是解决方案,而是下面带小图标的),并选择Add –> New Model。

clip_image001

选择创建一个新的“Data Contract Model”(数据契约模块) 。填写Mode name(模块名称)为CryptographyService.DataContracts和XML Namespace(XML命名空间)为http://www.cnblogs.com/LiYunQi/ 。

clip_image002

你现在应该有一个空白的设计区域。并且右侧将出现新的Data Contract Exploeer 窗口。点击该空白色设计区域,然后查看属性窗口。单击“Implementation Technology”,并选择“WCF Extension” 。

clip_image003

您还需要设置 Project Mapping table项目映射表的合同。这是XML文档(默认情况下,在ProjectMapping.xml,标记了 WSSF中作用于每一个项目和自动生成代码的说明。此文件可以编辑和修改)。设置Project Mapping table为我们刚刚建立的MyCryptographyService 。

clip_image004

打开左侧的工具箱,您会发现适应当前设计区域的一些工具,包括用于可序列化对象的Data Contract(数据契约)。用于枚举类型的Data Contract Enumeration(数据契约枚举)。用于NET数据类型的Primitive Data Type Collections(原始数据类型)。用于Data Contract Collections(数据契约集合)。用于异常的Fault Contracts(故障契约)等。

clip_image005

接下来您需要从工具箱中将一个Data Contract Enumeration”(数据合同枚举)拖动到设计区域。单击顶端上的名称(默认是DataContractEnum1 ) ,并改名为HashType 。右键单击并选择添加- > Value 分别添加MD5和SHA256的枚举。

clip_image006

拖曳另一数据契约枚举到设计区域,并将其命名为EncryptionAlgorithm1 。添加两个值为DES和Rijndael算法的枚举。当您完成时您设计区域应该是这个样子。

clip_image007

现在,从工具箱上拖动一个“Data Contract”到设计区域。改名为HashObject以相同的方式重新命名列举。右键单击添加新的Primitive Data Type。此属性名称“StringToHash”。

clip_image008

让我们现在就看看你刚刚添加的Primitive Data Type。它有一个Type属性是System.String及order属性为0 。今后可以在这里添加、修改这些属性,现在我们可以接受默认值。

clip_image009

现在,从工具箱选择Aggregation工具,然后按一下HashType枚举,按住鼠标按钮,拖动连接到HashObject 。HashObject将建立一个新的HashType。设置其order为1 。

clip_image010

在设计区域,您的HashObject和HashType看起来应该如下图所示。

clip_image011

您还应该通过拖动建立另一个“Data Contract”,命名为 EncryptionObject。添加Text member 建立好与EncryptionType关联。当您完成时,你应该有这四个对象在您的设计区域。

clip_image012

右键单击空白设计区域的任何地区,并点击“全部验证” 。应该没有任何错误。否则,请检查上述操作步骤。

clip_image013

下一步,右键点击一些空白,并点击“Generate Code”。

clip_image014

在MyCryptographyService.DataContracts项目(在解决方案文件夹Service Interface下)的“Generated Code”文件夹中你会发现,一些类库项目已经生成。请记住,每当您更改您的数据契约,这些类库项目及自动生成的代码将被覆盖。clip_image015

clip_image017

右键单击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”。

clip_image018

在First Class to map,选择DataContracts.EncryptionObject 。在Second Class to map,选择BusinessEntities.EncryptionObject 。Mapping class name 输入EncryptionObjectTranslator ,Mapping class XNL namespace保持MyCryptographyService.ServiceImplementation 。

clip_image019

在每一个列表框中选择Text属性,并单击map。然后单击完成。你不能手动修改map对话框产生的手动。只要你不在此运行“Create Translator”,您不必担心覆盖手动更改。事实上,我建议一旦你的指导方针和维护手动这样。

clip_image020

重复此过程,这次我们选择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)演练之三:创建服务契约和实现方法

posted on 2009-02-07 04:45  李运琪  阅读(1045)  评论(0编辑  收藏  举报