2012-11-22 4 views
1

현재 다른 클라우드 서비스에서 가져온 저장소 큐에 메시지를 저장 한 다음 나중에 다른 저장소에서 메시지를 가져 오는 Windows Azure 클라우드 서비스 프로젝트 (Service1)가 하나 있습니다. 열. 이 서비스에서받은 메시지를 기반으로 개체를 SQL Azure 데이터베이스에 추가 할 수 있습니다. 지금까지 큐에 작업을 추가하고 SQL 데이터베이스를위한 Entity DataModel을 포함하는 서비스 라이브러리를 만들었습니다.이 서비스 라이브러리에는 지금까지 하나의 테이블 인 tblCustomers 만 있습니다. 이 프로젝트에는 들어오는 고객을 표시하는 웹 역할과 고객이 proccesing을 위해 다른 서비스로 보내는 직원 역할이 있습니다. XMLSerializer를 사용하여 Customer Object를 XML로 serialize하고 해당 XML 메시지를 Queue에 보냅니다. 직렬화 코드 :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가 리드가 어떻게 구조화되었는지 알지 못하기 때문에 리드를 비 직렬화하는 방법을 모르는 것입니다. Service2에서 서비스 라이브러리 DLL을 서비스 2에 추가하면 문제가 해결되지만 Entity Framework가 변경 될 때마다 DLL을 통해 복사해야한다는 사실을 알고 있습니다. 두 프로젝트에서 별도의 엔티티 모델을 사용하는 것은 나쁜 습관이라고 생각하지만 WCF 서비스 라이브러리가 적합하다고 생각하지 않습니다. 클라우드 서비스가 필요하고 WCF 서비스가 모두 실행되어야하고 그 시점에서 전체 프로젝트를 WCF 서비스로 만들 수 있습니다. 그리고 그것은 목표가 아닙니다.

내 질문은 여러 다른 솔루션 (서비스 1과 서비스 2는 별도의 솔루션이어야 함)에서 엔터티 개체를 사용하는 가장 좋은 방법은 무엇입니까? 나는 이것이 다소 일반적인 문제라고 생각하지만 Azure Training Kit를 거쳐 몇 시간 동안 온라인 검색을 한 후에는 아무 것도 생각지도 못했습니다.

편집 : 이 물건을 지우려면 내가 찾고 있어요 모두 저장 큐를 사용하여 다른 하나 개의 푸른 클라우드 서비스에서 엔터티 개체를 전송하는 방법입니다. 즉, Customer1을 Service1에서 StorageQueue로 보낸 다음 Service2를 사용하여 해당 StorageQueue에서 동일한 Customer Object를 검색합니다. 서비스는 두 가지 솔루션으로 나뉩니다. Service1과 Service2에서 Customer (데이터베이스의 테이블로 표현되는 객체)를 정의하는 방법을 알아야합니다.

+0

이 질문은 Azure, SQL Azure 또는 Entity Framework에만 해당되는 것은 아닙니다. 질문은 간단합니다. 프로젝트간에 데이터 계약을 공유하는 가장 좋은 방법은 무엇입니까? 좀 더 간결하게 만들 수있는 방법이 있습니까? –

+0

질문은 클라우드 서비스 프로젝트에서이를 수행하는 방법입니다. 최선의 방법은 프로젝트 유형마다 다르다고 가정합니다.예를 들어, WCF 서비스를 구축하고 있다면 서비스 라이브러리를 만들고 다른 프로젝트에 서비스 참조를 추가하게해야하지만 클라우드 서비스와 동등한 작업을 수행하는 방법을 모릅니다. 내 클라우드 서비스 프로젝트가 포함 된 솔루션에 wcf 서비스 라이브러리를 추가 할 수 있지만 한 솔루션 내에서 두 개의 다른 서비스가 있습니다. 그렇다면 이상적이지 않습니다 ... 나는 푸른 구름 서비스와 보관 대기열을 사용하여 모든 것을 성취하고자합니다. –

답변

0

하나의 접근법은 Entity 클래스를 포함하는 별도의 프로젝트를 만드는 것입니다. 예를 들어, 프로젝트 이름이 "MyService"인 경우 MyService, MyService.FrontEnd, MyService.Worker 등 3 개의 프로젝트가 있습니다. 데이터베이스 엔티티 코드는 MyService에 있고 두 개의 다른 프로젝트는 해당 프로젝트를 참조로 포함합니다 (bin 폴더를 찾아서 .dll을 참조로 추가하지 마십시오.) Visual Studio를 사용하면 동일한 솔루션 내에서 다른 프로젝트를 참조 할 수 있습니다. 그런 식으로 dll을 복사하거나 빌드 순서가 올바르지 않은 동기화 문제에 부딪히지 않아도됩니다.)

몇 년 동안 여러 클라우드 프로젝트에서 사용해온 접근 방법입니다.