1

目前,我有一个 Windows Azure 云服务项目 (Service1),它将消息放入存储队列(由另一个云服务拉取),然后将消息从不同的存储队列中拉出。根据此服务收到的消息,可以将对象添加到 SQL Azure 数据库。到目前为止,我已经添加到队列工作中,并且我创建了一个服务库,其中包含 SQL 数据库的实体数据模型,到目前为止只有一个表 tblCustomers。这个项目有一个 web 角色来显示进来的客户,以及一个工人角色来将客户发送到另一个服务进行处理。我使用 XMLSerializer 将客户对象序列化为 xml,然后将该 xml 消息发送到队列。序列化代码:

//Serialize Lead to XML
            StringBuilder sbLead = new StringBuilder();
            var serializer = new XmlSerializer(typeof(Lead));
            using (var writer = XmlWriter.Create(sbLead))
            {
                serializer.Serialize(writer, objLead);
            } 
            String xml = sbLead.ToString();

            //Create and send message
            var message = new CloudQueueMessage(xml);
            clarityQueue.AddMessage(message);

客户实体对象定义:

public partial class Customer
    {
        public int ID { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public string AddressLine1 { get; set; }
        public string AddressLine2 { get; set; }
        public string ZipCode { get; set; }
        public string EmailAddress { get; set; }
        public string HomePhone { get; set; }
        public string CellPhone { get; set; }
        public string SSN { get; set; }
        public string DateOfBirth { get; set; }
        public string IDState { get; set; }
        public string IDNum { get; set; }
        public string Status { get; set; }
        public Nullable<System.DateTime> DateCreated { get; set; }
        public Nullable<System.DateTime> DateApproved { get; set; }
    }

现在我需要使用不同的服务(Service2)将该消息从队列中拉出并反序列化。问题是,到目前为止,Service2 不知道如何反序列化线索,因为它不知道线索的结构。我知道我可以将 Service1 中的服务库 DLL 添加到服务 2 中,我的问题将得到解决,但是每次实体框架更改时我都必须复制一个 DLL,这可能会很频繁。我认为在两个项目中使用单独的实体模型是不好的做法,但我也不觉得 WCF 服务库是合适的,因为我需要云服务,并且 WCF 服务都在运行,那时我可能以及使整个项目成为 WCF 服务。这不是目标。

我的问题是,在多个不同的解决方案中使用实体对象的最佳实践是什么(Service1 和 Service2 必须在不同的解决方案中)?我觉得这是一个有点普遍的问题,但是在通过 Azure 培训工具包并在网上搜索了几个小时之后,我还没有想出任何东西。

编辑: 为了清理一切,我正在寻找一种将实体对象从一个天蓝色云服务发送到另一个使用存储队列的方法。即从 Service1 将客户对象发送到 StorageQueue,然后使用服务 2 从该 StorageQueue 检索相同的客户对象。服务位于两个单独的解决方案中。我需要知道如何在 Service1 和 Service2 中定义 Customer(这是一个由数据库中的表表示的对象)

4

1 回答 1

0

一种方法是创建一个单独的项目,其中包含实体类以及其他内容(如存储库、枚举、常量等)

例如,如果您的项目名为“MyService”,您将有 3 个项目:MyService、MyService.FrontEnd、MyService.Worker。数据库实体代码将存在于 MyService 中,其他两个项目将包含该项目作为参考(不要浏览到 bin 文件夹并添加 .dll 作为参考。Visual Studio 允许您在同一解决方案中引用其他项目,这样您就不必复制 dll 或遇到构建顺序不正确的不同步问题)

这就是我几年来一直在多个云项目中使用的方法。

于 2012-11-22T05:23:13.907 回答