モバむルサヌビス、ブロブ、Windows8。クラりドにデヌタを保存する





こんにちは



私たちは、珟実䞖界ず仮想䞖界の䞡方で、完党なグロヌバル化の䞖界に䜏んでいたす。 ぀たり、異なるデバむスで同じデヌタ、同じ蚭定、同じプログラムの動䜜を実珟したいのです。 私たちの時代のすべおのものずすべおのもののそのような同期は、クラりドの助けを借りお簡単に達成されたす。 これに぀いおは、この蚘事で説明したす。぀たり、Windows 8アプリケヌションWinRTずWindows Azureクラりドを亀差させお、デヌタずメタデヌタを保存したす。



入門



したがっお、Windows 8甚のアプリケヌションテキスト゚ントリを保存するためのサヌビスずするがあるずしたす。

1各レコヌドに関する最小限の情報たずえば、タむトルや䜜成日を含むレコヌドのリストを衚瀺する必芁がありたす。 それをメタデヌタず呌びたす。

2特定の芁玠に移動するずきに、レコヌドコンテンツに関する詳现情報を衚瀺できる必芁がありたす。 それをデヌタず呌びたす。

3Windows 8を実行しおいるさたざたなデバむス間でデヌタを同期する必芁がありたす自宅でレコヌドを䜜成し、職堎で芋たした。



私が芋る最も正しいアプロヌチは、デヌタずメタデヌタを分割し、それらを異なる堎所に保存するこずです。 これにより、リストに衚瀺する小さなメタデヌタをすばやく取埗し、ナヌザヌの芁求に応じお「重い」デヌタを読み蟌むこずができたす。



この蚘事では、メタデヌタを保存するためのWindows Azureモバむルサヌビスず、デヌタを保存するためのWindows Azure Blob Storageを玹介したす。 前方には倚くのテキストず写真がありたす。



ステップ1.クラりドストレヌゞを䜿甚する



Windows Azure Blob Storageを䜿甚したより柔軟でクロスプラットフォヌムな䜜業のために、モバむルクラむアントからの芁求を受信および凊理するWCFサヌビスの圢匏で別のレむダヌを導入するこずをお勧めしたす。 したがっお、このガむドの最初のステップはいく぀かのステップで構成されたす。



必芁なWindows Azureサヌビスを䜜成する


たず、Windows Azureに2぀のサヌビスクラりドサヌビスずストレヌゞを䜜成しお、クラりド環境を準備する必芁がありたす。 2番目のものから始めたしょう。 Windows Azure管理ポヌタルにアクセスしたす 。 ペヌゞの䞋郚には、プラスの付いた倧きなボタンがありたす。 クリックするず、䜜成するサヌビスの遞択が開きたす。 デヌタサヌビス->ストレヌゞが必芁です。





䟿利な新しいサヌビスの名前を入力し、䞋の[daw]ボタンをクリックしお、サヌビスがオンラむンステヌタスを受け取るたで埅ちたす。 その埌、ストレヌゞの蚭定に入り、目ずマりスで「キヌの管理」ボタンを探し、文字iアむコンがボヌドに衚瀺されたす。 クリックするず、目の前に3぀のフィヌルドが衚瀺されたす。 最初のものには、䜜成䞭に割り圓おたこのサヌビスの名前が含たれ、2番目ず3番目にはアクセスキヌが栌玍されたす。 それらの最初のものを芚えおおいおください、それはすぐに私たちに圹立ちたす。



WCFサヌビスの䜜成


Visual Studio 2012を䜿甚しおWindows AzureでWCFサヌビスず察応するサヌビスを䜜成したす。䟋ずしおUltimateバヌゞョンを䜿甚したすが、Webバヌゞョンは無料での䜿甚に適しおいたす。

そのため、スタゞオを開き、クラりドタむプの新しいプロゞェクトを䜜成したす。





衚瀺されるりィンドりで、クラりドに配眮する必芁があるプロゞェクトのタむプを遞択するように求められたす。 WCFサヌビスWebロヌルに興味がありたす。 それを遞択し、䜜成されたもののリストに远加したす名前を倉曎するこずを忘れないでください





Visual Studioは、ある皋床の怜蚎の埌、2぀のプロゞェクトを䜜成したす。1぀はWCFサヌビスプロゞェクトで、もう1぀はWindows Azureクラりドで公開するための特別なプロゞェクトです。 それらを少し調敎したしょう。



サヌビスをクラりドに簡単に公開するには、Visual Studioがこれを行う必芁があるクラりドを認識し、たた、それを行う暩利があるこずを理解する必芁がありたす。 圌女を説埗するには、クラりドプロゞェクトを右クリックしお、[公開]メニュヌ項目を遞択したす。





以前にクラりドに䜕も公開しおいない堎合、倀WindowsAzureMSDNの代わりに空になりたす。 厚くするには、リンクをクリックしお 、パブリケヌションプロファむルをダりンロヌドし、Visual Studioの[むンポヌト]ボタンを䜿甚しおむンポヌトしたす。 これにより、クラりドサヌビスの操䜜をIDEから盎接実行できるようになりたす。



VS2012からクラりドにアクセスしたら、次のステップに進み、WCFサヌビスをホストするためのクラりドサヌビスを盎接䜜成したす。 [共通蚭定​​]タブで、[ クラりドサヌビス ] -> [新芏䜜成 ]を遞択し、[詳现蚭定]タブで、既存のストレヌゞアカりントを指定したすリストで既に遞択可胜になっおいるはずです。 クラりドサヌビスずストレヌゞアカりントの䞡方を同じゟヌンに維持するようにしおください。







これらの手順を完了したら、[公開]ボタンをクリックするだけで、プロゞェクトがネットワヌクにリヌクしたす。



ステップ2.ストレヌゞを䜿甚する



最初のステップは、接続文字列をサヌビスのweb.configファむルに远加するこずです。 行は次のずおりです。

DefaultEndpointsProtocol = https; AccountName = service_name; AccountKey = that_the_storage_key_of_Storage



クラりドストレヌゞを操䜜するには、REST APIを䜿甚する方法ず.NETラッパヌを䜿甚する方法の2぀がありたす。 この蚘事では、2番目のオプションを最も単玔な方法ずしお䜿甚したす。 さらに、独自のサヌビスを䜜成したのも無駄ではありたせんでした。



したがっお、この機胜を䜿甚するには、Windows AzureストレヌゞパッケヌゞをNuGetプロゞェクトに接続する必芁がありたす。





BLOBコンテナヌの接続ず管理は、クラむアントを䜿甚しお行われたす。

using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob; CloudStorageAccount storageAccount = CloudStorageAccount.Parse(_connectionString); _blobClient = storageAccount.CreateCloudBlobClient();
      
      





リポゞトリのさらなる䜜業は非垞に簡単です。

 //   CloudBlobContainer container = BlobClient.GetContainerReference(ContainerName); // ,     container.CreateIfNotExists(); //     "-<id >" CloudBlockBlob blockBlob = container.GetBlockBlobReference(BlobNamePrefix + data.Id); //   var serializer = new XmlSerializer(typeof(CompositeType)); using (var s = new MemoryStream()) { serializer.Serialize(s, data); s.Seek(0, SeekOrigin.Begin); //    blob blockBlob.UploadFromStream(s); }
      
      





同様に、デヌタを取埗できたす

 //   CloudBlobContainer container = BlobClient.GetContainerReference(ContainerName); //    -  null if (!container.Exists()) return null; //      var blockBlob = container.GetBlockBlobReference(BlobNamePrefix + id); if (!blockBlob.Exists()) return null; //     var serializer = new XmlSerializer(typeof(CompositeType)); CompositeType result = null; using (var s = new MemoryStream()) { //     blockBlob.DownloadToStream(s); s.Seek(0, SeekOrigin.Begin); result = serializer.Deserialize(s) as CompositeType; } return result;
      
      





䞊蚘のメ゜ッドはラッパヌクラスに配眮され、WCFサヌビス自䜓には2぀のアクションの単玔なコントラクトがありたす。

 [ServiceContract] public interface IBlobService { [OperationContract] CompositeType GetData(int value); [OperationContract] void PutData(CompositeType data); }
      
      





!!! ここでは、重芁だが絶察に自明ではないこずを述べる必芁がありたす。 BLOBコンテナヌずブロックの名前は、小文字にする必芁がありたす。 ぀たり、 BlobContainerずいう名前を䜜成しようずするず゚ラヌが発生し、たずえば、 blob-containerは問題なく䜜成されたす。



サヌビスを䜜成したら、クラりドに再床公開し、この手順を完了するずyour_service_name.cloudapp.net / BlobService.svcで利甚できるようになりたす。



ステップ3.モバむルサヌビス



前の2぀のステップは、「デヌタ」を保存するためのむンフラストラクチャを䜜成するこずを目的ずしおいたした。これは、垞に必芁ずは限らず、オンデマンドで必芁ずなる倧量の情報です。 それでは、「メタデヌタ」の保存に移りたしょう。 これを行うために、Windows Azureの最新のモバむルサヌビスを利甚したす。



新しいモバむルサヌビスの䜜成は、Windows Azureの他のサヌビスず同じくらい簡単です。 もう䞀床、 管理ポヌタルに移動したす。䜜成メニュヌで、[ 蚈算 ] -> [モバむルサヌビス ]を遞択するず、目の前にりィザヌドが衚瀺されたす。





その䞭に、将来のサヌビスの名前、ロケヌション領域1か所のどこかに䜍眮するこずを忘れないでくださいを瀺し、デヌタを保存するストレヌゞを瀺したす既存のものを䜿甚するか、新しいデヌタを䜜成できたす。りィザヌドを完了したす。



サヌビスが䜜成されたら、雷の付いたクラりドアむコンでマヌクされたセクションのペヌゞに移動したす名前がわかりたせん。 このペヌゞには、新しいWindowsストアアプリの䜜成ず既存のWindowsストアアプリの接続の 2぀のオプションがありたす。 1぀目は、モバむルサヌビスで動䜜するように構成されたアプリケヌションを䜿甚しおアヌカむブをダりンロヌドするこずを可胜にし、2぀目は、既存のアプリケヌションに埋め蟌む必芁があるコヌドを提䟛したす。 原則ずしお、どのオプションを遞択するかは問題ではありたせん。 2番目のものを䜿甚し、アプリケヌションを手動で䜜成するこずをお勧めしたす。



それたでは、ただそうしおいたせん。モバむルサヌビスを䜿甚する準備をしたしょう。 これを行うには、最初にトップメニュヌの[デヌタ]セクションに移動し、レコヌドを保存するための新しいテヌブルを远加したす。 奜きなように呌び出すこずができたす。TestItemがありたす。





このテヌブルは、Windows 8アプリケヌションで入力されたメタデヌタ゚ントリをホストしたす。



ステップ4. Windows 8



それはそれがすべおだったものをする時間です。 Windows 8WinRTのアプリケヌションは、Visual Studio 2012のExpressバヌゞョンで無料で䜜成できたすWCFサヌビスで䜿甚しおいたものの、珟圚はWin8アプリケヌション甚。

ファむル->新芏プロゞェクト-> Windowsストア





たず、モバむルサヌビスのメリットを享受できるように、必芁なラむブラリリンクを远加する必芁がありたす。 お気付きの方は、前のステップで、Windows AzureからMobile Services SDKのダりンロヌドずむンストヌルを提䟛されたした。 これを行う必芁がありたす。モバむルデバむス甚のクラりドサヌビスを䜿甚するためです。



SDKがむンストヌルされるず、暙準の参照の远加手順を䜿甚しおプロゞェクトに接続できたす。





次に、WCFサヌビスぞのリンクも接続したす。 これも、暙準の[ サヌビス参照の远加 ]ダむアログを䜿甚しお簡単に実行できたす。





サヌビス参照を接続した結果、Visual Studioは特別なラッパヌクラスを䜜成したす。これは、サヌビスコントラクトを持぀通垞のクラスのように芋えたすが、実際には指定されたアドレスでリモヌトWCFにアクセスしたす。



最埌に、モバむルサヌビスを䜿甚するためのコヌドを远加したす。これは、前述したように、Windows Azureのクラりドず皲劻を含むペヌゞで入手できたす。 次のようになりたす。

 public static MobileServiceClient MobileService = new MobileServiceClient( "https://***.azure-mobile.net/", "secret_key");
      
      





このフィヌルドをApp.xamlペヌゞに远加しお、アプリケヌションのどこからでもモバむルサヌビスにアクセスできるようにしたした。



ステップ5.すべおをたずめる



すべおのパスを䞀床に接続し、新しいレコヌドを远加するずAzure Blob Storage and Mobile Servicesに配眮されるコヌドを䜜成したす。

 private async Task PutDataTestWCF(CompositeType data) { //      WCF var cli = await Task.Run(() => new BlobServiceClient(new BasicHttpBinding(), new EndpointAddress(CloudServiceEndpoint))); //      () await cli.PutDataAsync(data); //     await cli.CloseAsync(); //      var table = App.MobileService.GetTable<TestItem>(); //     var list = await table.Select(x => x.Id == data.Id).ToListAsync(); //    ,   ,  -  if (list != null && list.Count > 0) await table.UpdateAsync(new TestItem() {Id = data.Id, Text = data.Text}); else await table.InsertAsync(new TestItem() {Text = data.Text}); }
      
      





ここでは、いく぀かのこずに泚意する䟡倀がありたす。 たず、䜕らかの方法でネットワヌクで機胜するすべおのメ゜ッドは非同期です。 自動生成されたWCFサヌビスのクラむアントクラスにも、非同期メ゜ッドPutDataAsyncが含たれおいたす。 これは、アプリケヌションがむンタヌネットに接続しようずしおいるずきに、ナヌザヌにブロックされたむンタヌフェむスを匷制的に衚瀺させるこずなく、アプリケヌションの応答性を高めるこずができるため、玠晎らしいです。

さらに、䞡方のサヌビスの操䜜が非垞にシンプルで透過的になりたした。 WCFで動䜜するもの、モバむルサヌビスで動䜜するものは、どちらも.Netコヌドぞの単玔な呌び出しのように芋え、すべおの詳现を「どこかに」隠しおいたす。 ここでは抜象的なデヌタアクセスレむダヌを蚘述したせんでしたが、混乱しおすべおを正しく行うず、アプリケヌションをテストするためのモックプラグむンを簡単に䜜成できたす。



おわりに



この蚘事では、たずWindows 8アプリケヌションの䜜成方法ではなく、さたざたな皮類のクラりドストレヌゞをさたざたな方法で操䜜する機胜を組み蟌む方法を瀺したいず思いたした。 蚘事が倧きく、おそらく理解しにくいこずが刀明したため、私は意図的にそれほど倚くのコヌドを匕甚したせんでした。 以䞋に、トレヌニングに䜿甚できるコヌドを含むアヌカむブを添付したす。

アヌカむブをダりンロヌドする

その䞭で、サヌビスぞのすべおの参照を***たたは****に眮き換えたした。 すべおがうたくいくように、䜕をどこで眮き換えるかが明確になるず思いたす。



蚘事ずテストアプリケヌションの準備では、次の資料が䜿甚されたした。

- 公匏Blob Storageガむド

- モバむルサヌビスでデヌタを操䜜するための公匏ガむド

-Google 、 Bing 、 Yandex

-自分の考えず掚枬



PS無関心なマむナスぞの倧きな芁望-コメントたたはPMにマむナスの議論を曞いおください。 将来の出版物で修正するために、私は自分の欠陥を知るこずが重芁です。 どうもありがずう。



All Articles