2012-11-22 54 views
1

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

//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; } 
    } 

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

我的问题是,在多种不同解决方案中使用实体对象的最佳做法是什么(Service1和Service2必须位于不同的解决方案中)?我觉得这是一个比较常见的问题,但通过Azure培训套件并在网上搜索几个小时后,我还没有提出任何问题。

编辑: 要明确的事情了,所有我在寻找的是一个方法,从一个Azure云服务发送一个实体对象到另一个使用存储队列。即将客户对象从Service1发送到StorageQueue,然后使用Service 2从StorageQueue中检索同一个客户对象。服务分为两个独立的解决方案。我需要知道如何在Service1和Service2中定义Customer(它是数据库中的表格表示的对象)

+0

此问题不是特定于Azure,SQL Azure或实体框架。您的问题很简单:跨项目共享数据合同的最佳做法是什么?有什么方法可以使这个更简洁一点? –

+0

问题是如何在云服务项目中做到这一点。我假设项目类型之间的最佳做法不同。例如,如果我正在构建一个WCF服务,我将创建一个服务库,并让其他项目添加服务引用,但我不知道如何执行与云服务等效的操作。我可以在包含我的云服务项目的解决方案中添加一个wcf服务库,但是在一个解决方案中,我有两种不同的服务。如果这样做不是理想的......我想用天蓝色的云服务和存储队列来实现一切。 –

回答

0

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

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

相关问题