2012-11-22 95 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或遇到構建順序不正確的不同步問題)

這就是我多年來一直在多個雲項目中使用的方法。

相關問題