1

現在、1つのWindows Azureクラウドサービスプロジェクト(Service1)があり、メッセージをストレージキューに入れ(別のクラウドサービスによってプルされる)、後で別のストレージキューからメッセージをプルします。このサービスによって受信されたメッセージに基づいて、オブジェクトがSQLAzureデータベースに追加される場合があります。これまでのところ、キューに追加して機能させ、SQLデータベースのエンティティデータモデルを含むサービスライブラリを作成しました。これまでのところ、tblCustomersという1つのテーブルしかありません。このプロジェクトには、入ってくる顧客を表示する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からService2にサービスライブラリDLLを追加でき、問題は解決することを理解していますが、Entity Frameworkが変更されるたびにDLLをコピーする必要があります。これは、おそらくかなり頻繁に発生します。両方のプロジェクトで個別のエンティティモデルを使用することは悪い習慣だと思いますが、クラウドサービスとWCFサービスの両方を実行する必要があるため、WCFサービスライブラリが適切であるとは思えません。その時点で、また、プロジェクト全体をWCFサービスにします。そしてそれは目標ではありません。

私の質問は、複数の異なるソリューションでエンティティオブジェクトを使用するためのベストプラクティスは何ですか(Service1とService2は別々のソリューションである必要があります)?これはやや一般的な問題のように感じますが、Azureトレーニングキットを確認し、オンラインで何時間も検索した後、何も思いつきませんでした。

編集: 物事を片付けるために、私が探しているのは、ストレージキューを使用してある紺碧のクラウドサービスから別のサービスにエンティティオブジェクトを送信する方法です。つまり、Service1からStorageQueueに顧客オブジェクトを送信し、Service2を使用してそのStorageQueueから同じ顧客オブジェクトを取得します。サービスは2つの別々のソリューションにあります。Service1とService2の両方でCustomer(データベース内のテーブルによって表されるオブジェクト)を定義する方法を知る必要があります

4

1 に答える 1

0

1つのアプローチは、Entityクラスに加えて、他のもの(リポジトリ、列挙型、定数など)を含む個別のプロジェクトを作成することです。

たとえば、プロジェクトの名前が「MyService」の場合、MyService、MyService.FrontEnd、MyService.Workerの3つのプロジェクトがあります。データベースエンティティコードはMyServiceに存在し、他の2つのプロジェクトにはそのプロジェクトが参照として含まれます(binフォルダーを参照して.dllを参照として追加しないでください。Visualstudioでは、同じソリューション内の他のプロジェクトを参照できます。そうすれば、dllをコピーしたり、ビルドの順序が正しくない同期の問題に遭遇したりする必要がありません)

これは、私が数年前から複数のクラウドプロジェクトで使用しているアプローチです。

于 2012-11-22T05:23:13.907 に答える