精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在Azure上構建一個基于Facebook的營銷式應用程序(中)

原創
云計算
當你的Facebook應用程序點擊率上升的時候,它如何進行擴展呢?如果你是在Windows Azure上構建的這個應用程序,并且是按橫向擴展的思想設計的這個應用程序,那么很高興地告訴,你可以“高枕無憂”了。

本文接在Azure上構建一個基于Facebook的營銷式應用程序(上) 和

請看下篇《在Azure上構建一個基于Facebook的營銷式應用程序(下)》

在一個Canvas頁面

這個應用程序在Facebook上的Canvas頁面會映射到這個應用程序在Azure上的base URL(例如:http://azurefacebooksample.cloudapp.net/)。這是一個展示初始的聯系信息的窗體。這是基本的實現:

Listing 1

[CanvasAuthorize(Perms = "user_birthday")]

public ActionResult Index()

{

FacebookApp app = new FacebookApp();

dynamic response = app.Api("me");

Contact contact = new Contact();

contact.FirstName = response.first_name;

contact.LastName = response.last_name;

string query = "select birthday_date from user where uid = me()";

response = app.Fql(query);

if (response.Count > 0)

contact.DateOfBirth = response[0].birthday_date;

return View(contact);

}

這看起來十分的簡單,這主要得益于Facebook C# SDK。這個SDK通過“CanvasAuthorize”特性處理了Facebook OAuth身份驗證和應用程序的授權,并且提供了一個“FacebookApp”對象。你應該還記得,在一個新用戶運行“AzureSample”以前,他們必須要給這個應用程序授予可以訪問這個用戶的出生日期的特殊權限。為了達到這個目的,我們需要做的所有事情就是,使用“CanvasAuthorize”特性,對任何一個需要授權的控制器操作進行標記,指定需要請求的擴展權限是可選的(在這里,我們指定了“user_birthday”權限)。

“FacebookApp”對象可以訪問經過簽名的請求信息,也可以訪問Facebook的Graph API和REST API。在這個控制器中,我們使用“FacebookApp”調用一個Graph API(“me”),來返回當前用戶的信息(其中包括***個名字和***一個名字)。我們不能使用這個Graph API來獲取這個用戶的出生日期,但是,我們可以求助于Facebook FQL,創建一個查詢來找到當前用戶的出生日期。我們可以通過“FacebookApp”來使用FQL(Formal Query Language) 。我們把這個用戶的信息添加到一個新的“Contact”對象中,這是一個來自于域對象的數據模型對象。然后,我們把這個“contact”放到一個視圖中。

這是這個索引視圖的完整代碼:

Listing 2

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"

Inherits="System.Web.Mvc.ViewPage<AzureFacebookSample.Domain.Models.Contact>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">

Home

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<div>Please provide the following information. All fields are required.</div>

<% using (Html.BeginForm())

{%>

<%: Html.ValidationSummary(true)%>

<div class="editor-label">

<%: Html.LabelFor(model => model.FirstName)%>

</div>

<div class="editor-field">

<%: Html.TextBoxFor(model => model.FirstName)%>

<%: Html.ValidationMessageFor(model => model.FirstName)%>

</div>

<div class="editor-label">

<%: Html.LabelFor(model => model.LastName)%>

</div>

<div class="editor-field">

<%: Html.TextBoxFor(model => model.LastName)%>

<%: Html.ValidationMessageFor(model => model.LastName)%>

</div>

<div class="editor-label">

<%: Html.LabelFor(model => model.Email)%>

</div>

<div class="editor-field">

<%: Html.TextBoxFor(model => model.Email)%>

<%: Html.ValidationMessageFor(model => model.Email)%>

</div>

<div class="editor-label">

<%: Html.LabelFor(model => model.DateOfBirth)%>

</div>

<div class="editor-field">

<%: Html.EditorFor(model => model.DateOfBirth)%>

<%: Html.ValidationMessageFor(model => model.DateOfBirth)%>

</div>

<div>You must be 18 or older to participate.</div>

<div class="editor-label">

<%: Html.LabelFor(model => model.Zip)%>

</div>

<div class="editor-field">

<%: Html.TextBoxFor(model => model.Zip)%>

<%: Html.ValidationMessageFor(model => model.Zip)%>

</div>

<p>

<input type="submit" value="Next"/>

</p>

<%} %>

</aspContent>

這個視圖指定了用于收集聯系信息的窗體字段。驗證是通過“Contact”數據模型上的特定注解來實現的。當用戶點擊“next”按鈕的時候,這些窗體字段會被發送到控制器的post操作中:

Listing 3

[HttpPost]

[CanvasAuthorize]

Public ActionResult Index(Contact contact)

{

FacebookApp app = new FacebookApp();

contact.PartitionKey = app.UserId.ToString();

if (ModelState.IsValid)

{

contactRepository.Save(contact);

return this.CanvasRedirectToAction("SelectStore");

}

Return View(contact);

}

除了從窗體返回的聯系信息之外,我們還會通過“FacebookApp”對象來抓取用戶的Facebook ID,然后放到“Contact”中,以便于我們可以跟蹤將來對這個應用程序的訪問(客戶只可以注冊一次,領取一次獎品)。

#p#

在Azure Storage中存儲“Contact”

在上面那段代碼中,你可能已經注意到了,存儲客戶的Facebook ID的“Contact”屬性叫作“PartitionKey”,而不是“FacebookId”。“Contact”是一個數據模型,這意味著它可以直接存儲到Azure Table Storage中。它繼承于“TableStorageEntity”,對于可存儲的實體來說,“TableStorageEntity”是一個方便的基類,在這個類中,包含了“PartitionKey”屬性和“RowKey”屬性。

“AzureFacebookSample”使用Azure Table Storage,因為在Azure Table Storage中,插入操作和主鍵查詢都很快,而且,它可以無限地擴展。在一個Azure表中,除了這些實體屬性所必須列之外,每行還包括一個partition key,一個row key,和一個時間戳。為了獲得***的性能,查詢應該被嚴格地限制在那些基于主鍵的字段中,不應該包括含他的屬性。

我們把Facebook ID作為partition key,把blank作為row key,然后把“contact”存儲到一個Azure表中。這樣做可以讓存儲的“contact”更容易使用(使用起來也更快),因為我們可以通過Facebook ID來查找或更新它們。

Web角色和Worker角色都可以通過域項目提供的“ContactRepository”來訪問存儲的“contact”對象。通過Windows Azure Toolkit中的一些類,“ContactRepository”可以直接和Azure storage進行交互,這可以讓實現變得更加簡潔。

Listing 4

public class ContactRepository : IContactRepository

{

readonly AzureTable<Contact> _table;

public ContactRepository()

{

var factory = new AzureStorageFactory ();

_table = (AzureTable<Contact>) factory.GetTable<Contact>();

}

public Contact GetFromFacebookId(Int64 facebookId)

{

return this.Get(facebookId.ToString());

}

public Contact Get(string partitionKey)

{

return _table.Get(c => c.PartitionKey == partitionKey && c.RowKey == "");

}

public void Save(Contact contact)

{

_table.AddOrUpdate(contact);

}

public void Delete(Contact contact)

{

_table.Delete(contact);

}

}

這段代碼展示了“ContactRepository”的完整實現。在構造函數中,我們創建了一個“AzureStorageFactory”對象,然后使用“factory”來獲取“Contact”表。“AzureStorageFactory”和“AzureTable”都是在WindowsAzureToolkit中定義的類,這兩個類可以讓使用Azure Table Storage變得更加容易。實際上,這個“contact”容器中的大多數方法都是“AzureTable”中的對應方法的封裝。“Get()”方法直接通過“partition key”來查詢“contact”。

在這個處理程序的***,應用程序使用這個容器把聯系信息寫入到Azure Storage中。因為處理過程還沒有完成,所以這個“contact”還不能標記為已注冊(在選擇了商店以后,才應該這么做)。在索引操作開始的時候,這個“contact”容器還可以用來驗證。

Listing 5

if (AlreadyRegistered(app.UserId))

{

return this.CanvasRedirectToAction("SignupComplete");

}

驗證的實現如下所示:

Listing 6

private bool AlreadyRegistered(Int64 facebookId)

{

Contact contact = contactRepository.GetFromFacebookId(facebookId);

Return (contact != null) && contact.Registered;

}

 

本文接在Azure上構建一個基于Facebook的營銷式應用程序(上)

請看下篇《在Azure上構建一個基于Facebook的營銷式應用程序(下)》

原文名:Building a Facebook Marketing App on Azure 作者:Steve Apiki

【本文乃51CTO精選譯文,轉載請標明出處!】

【編輯推薦】 

  1. 在Azure上構建一個基于Facebook的營銷式應用程序(下)
  2. 在Azure上構建一個基于Facebook的營銷式應用程序(下)
  3. 無需頂禮膜拜 三步打造經濟高效的云基礎架構

 


 

 

 

責任編輯:王勇 來源: 來源:51CTO
相關推薦

2011-03-14 14:47:50

2011-03-14 15:14:10

AzureFacebook營銷式應用程序

2011-11-23 10:06:32

Azure微軟移動應用

2011-03-10 10:45:47

Azure“Hello Worl

2011-03-15 19:45:27

Windows Azu

2011-03-22 09:45:56

Windows AzuSilverlight

2025-07-24 09:08:31

2010-11-09 10:37:21

2023-09-21 08:00:00

ChatGPT編程工具

2021-07-14 17:39:46

ReactRails API前端組件

2010-07-12 10:11:27

ibmdwWeb

2023-08-22 20:55:04

AzureLLMTypeChat

2018-12-13 11:10:21

OpenSnitchLinux防火墻

2018-11-14 19:00:24

PythonRedis共享單車

2011-05-11 10:58:39

iOS

2021-02-17 11:05:34

PythonPyQt代碼

2010-01-08 12:14:44

ibmdwAndroid

2015-10-14 10:43:17

PaaSSaaS應用構建

2015-03-10 09:51:56

云開發云應用程構建PaaS

2011-03-22 10:03:55

Windows AzuSilverlight
點贊
收藏

51CTO技術棧公眾號

亚洲永久在线| 中文无码日韩欧| 中文字幕一区二区三区四区| 亚洲影院色在线观看免费| 免费一级a毛片夜夜看| 日韩高清一级| 欧美狂野另类xxxxoooo| 少妇av一区二区三区无码| 91精彩视频在线播放| 粉嫩一区二区三区性色av| 国产ts一区二区| 青娱乐在线视频免费观看| 女优一区二区三区| 欧美一级免费大片| 日本美女高潮视频| 国产中文在线播放| 中文字幕视频一区| 欧美精品一区二区三区在线看午夜| 一区二区三区午夜| 免播放器亚洲| 欧美激情按摩在线| 亚洲一级片在线播放| 风间由美一区二区av101| 欧美四级电影在线观看| 动漫av网站免费观看| 婷婷色在线播放| 国产精品免费久久| 欧美一级片免费观看| 超碰在线观看99| 久久国产免费看| 国产97色在线| 在线天堂中文字幕| 亚洲一本视频| 欧美精品一区三区| 亚洲欧美综合7777色婷婷| 欧美精美视频| 日韩电影中文字幕在线观看| 精品伦一区二区三区| 国产精品一区二区精品视频观看| 在线一区二区视频| 黄www在线观看| 92久久精品| 亚洲国产视频一区二区| 美国av在线播放| 麻豆av在线导航| 国产精品天美传媒| 亚欧精品在线| 91社区在线观看| 国产欧美1区2区3区| 日韩国产美国| 国产在线日本| 国产视频在线观看一区二区三区 | 台湾亚洲精品一区二区tv| 日韩免费看网站| 奇米777在线| 亚洲一区电影| 欧美mv日韩mv国产网站app| 国产999免费视频| 国产一区二区三区亚洲综合| 91精品久久久久久久久99蜜臂| 午夜免费看毛片| 成人日韩视频| 精品奇米国产一区二区三区| www.四虎精品| 欧美一级三级| 亚洲人成欧美中文字幕| 中文字幕有码在线播放| 秋霞欧美视频| 久热精品视频在线观看| 免费一级肉体全黄毛片| 国产亚洲激情| 国产精品扒开腿做爽爽爽男男| 中国一区二区视频| 国产一区二区免费视频| 国产精品免费一区二区三区四区| 凸凹人妻人人澡人人添| 久久伊人蜜桃av一区二区| 日韩欧美一区二区视频在线播放 | 99久久久无码国产精品性波多 | 亚洲成人精品视频| 精品黑人一区二区三区观看时间| 国产精品一区二区三区av麻 | 国产高清视频色在线www| 岛国av一区二区三区| 国产又大又黄又粗的视频| 国产精品视频一区视频二区 | 国产欧美 在线欧美| 黄色一区二区视频| 国产在线不卡一卡二卡三卡四卡| 97夜夜澡人人双人人人喊| 午夜视频在线免费播放| 欧美高清在线视频| 国产高清不卡无码视频| 高潮在线视频| 欧美这里有精品| 国产成人精品综合久久久久99| 国产精品香蕉| 中文字幕av一区二区三区谷原希美| 免费在线观看a级片| 一本色道久久综合一区| 国产女精品视频网站免费| 日本成人动漫在线观看| 国产精品麻豆一区二区| a级黄色一级片| 自拍偷拍亚洲| 亚洲人在线观看| 久久久久性色av无码一区二区| 六月丁香综合| 51国偷自产一区二区三区| 你懂的在线观看视频网站| 亚洲视频香蕉人妖| 欧美激情精品久久久久久小说| 一本色道69色精品综合久久| 一区二区三区 在线观看视| 久久久久久久国产视频| 奇米精品一区二区三区在线观看一| 高清不卡日本v二区在线| 最新国产在线观看| 日韩欧美亚洲国产一区| 国产人妻精品午夜福利免费| 日本a级不卡| 日产日韩在线亚洲欧美| 亚洲精品无码专区| 最新日韩av在线| 日韩精品你懂的| 亚洲精品国产setv| 久久久久久av| 国产视频在线一区| 国产精品毛片无遮挡高清| 97在线播放视频| 国产精品99久久免费观看| 美日韩在线视频| 中文字幕第31页| 久久精品夜夜夜夜久久| 国产91对白刺激露脸在线观看| 亚洲一二av| 欧美大片欧美激情性色a∨久久| 一区二区三区精彩视频| 国产精品美女www爽爽爽| 亚洲欧美另类动漫| 国产欧美日韩在线一区二区| 欧美一级黑人aaaaaaa做受| 蜜桃在线一区二区| 亚洲国产综合人成综合网站| 丰满少妇中文字幕| 欧美精品激情| eeuss一区二区三区| 一色桃子av在线| 日韩免费性生活视频播放| 欧美又粗又大又长| 国产精品一区专区| 欧美在线观看黄| 风间由美一区二区av101| 国内揄拍国内精品| 四虎电影院在线观看| 狠狠躁18三区二区一区| www.av欧美| 136福利视频导航| 激情小说亚洲图片| 成人444kkkk在线观看| 国产精品午夜福利| 亚洲精品日韩综合观看成人91| 99中文字幕在线| 午夜欧美精品| 精品国产一区二区三区四区vr| 欧美aa在线观看| 亚洲欧洲在线免费| 一区两区小视频| 成人欧美一区二区三区1314| 性高潮久久久久久| 亚洲欧美久久久| 午夜欧美性电影| 成人在线视频国产| 国外成人性视频| 国产在线自天天| 日韩一区和二区| 日本视频免费在线| 久久久久久久久99精品| 九九热精品国产| 亚洲成人原创| 视频一区二区三区免费观看| 国产高清日韩| 97在线免费观看| av在线播放免费| 日韩一区二区免费在线电影| 成人在线免费看视频| 国产蜜臀97一区二区三区| 欧美国产日韩在线视频| 日韩一级大片| 亚洲精品中字| 狠狠久久伊人| 成人激情视频小说免费下载| zzzwww在线看片免费| 这里只有精品丝袜| 免费观看毛片网站| 精品污污网站免费看| 一级片免费网址| 国产精品免费视频观看| 免费在线观看成年人视频| 国内精品视频666| 男人亚洲天堂网| 欧美日本亚洲韩国国产| 日本一区二区在线视频| 天堂av一区| 国产精品久久久久影院日本| www在线观看黄色| 美女精品久久久| av黄色在线观看| 国产丝袜高跟一区| 亚洲精品国产一区二| 欧美日韩亚洲综合一区| 51国产偷自视频区视频| 亚洲一区二区三区四区不卡| 182在线观看视频| 久久先锋资源网| 中国极品少妇xxxx| 国产一区高清在线| 欧美午夜aaaaaa免费视频| 中文日韩在线| a级黄色小视频| 欧美日韩第一区| 中文字幕一区二区三区乱码| 精品国产一区探花在线观看 | 亚洲女女做受ⅹxx高潮| 久久美女免费视频| 91天堂素人约啪| 中国特级黄色片| 国产麻豆午夜三级精品| 人人干人人干人人| 青青草一区二区三区| 国语对白做受xxxxx在线中国| 亚洲国内自拍| 青草青青在线视频| 国内精品久久久久久久影视蜜臀| 伊人网在线免费| 亚洲精品网址| 免费久久久久久| 91精品福利| 男人草女人视频| 一本一道久久综合狠狠老| 在线观看日韩片| 外国成人免费视频| 一区二区三区四区国产| 91一区二区| 欧美一级免费在线观看| 91精品天堂福利在线观看| 亚洲亚洲精品三区日韩精品在线视频 | 激情婷婷欧美| 欧美精品卡一卡二| 激情自拍一区| av免费观看国产| 中日韩男男gay无套| 国产成人无码a区在线观看视频| 亚洲午夜视频| av动漫在线看| 丝瓜av网站精品一区二区| 在线免费视频a| 奇米影视7777精品一区二区| 中文字幕久久av| 国产乱码精品一区二区三| 国内自拍偷拍视频| 成人av免费在线观看| free性中国hd国语露脸| 久久久久久久久伊人| 91社区视频在线观看| 日韩美女啊v在线免费观看| 久久久久久久久97| 欧美视频在线免费看| 国产情侣免费视频| 这里只有精品99re| 欧美 日韩 国产 成人 在线 91| 亚洲精品av在线播放| 国产在线观看精品一区| www.久久久久久.com| 精灵使的剑舞无删减版在线观看| 亚州欧美日韩中文视频| 一二区成人影院电影网| 91精品在线观| 亚洲日产av中文字幕| 一区二区高清视频| 在线观看不卡| 香蕉视频网站入口| 国产成人小视频| av黄色免费网站| 亚洲视频一区二区在线| 亚洲男人的天堂在线视频| 欧美精品久久久久久久久老牛影院| 亚洲黄色在线免费观看| 亚洲一级黄色片| 伊人222成人综合网| 国产激情999| 99ri日韩精品视频| 亚洲.欧美.日本.国产综合在线| 色偷偷成人一区二区三区91 | 欧美另类激情| 97中文在线| 欧美三级伦理在线| 国产欧美精品aaaaaa片| 日本欧美大码aⅴ在线播放| 极品白嫩的小少妇| 国产精品乱码妇女bbbb| 天堂网一区二区三区| 91精品在线观看入口| 你懂的在线免费观看| 欧美日韩国产二区| 国产精品99久久久久久董美香 | 噜噜噜在线视频| 日韩美女视频一区二区| 草莓视频18免费观看| 精品国产乱码久久久久久久久 | 欧美日韩国产一区二区三区| 91 中文字幕| 亚洲一级一级97网| 天堂在线中文网官网| 99久久久精品免费观看国产| 日韩精品四区| 六月丁香婷婷在线| 成人激情文学综合网| 中文字幕av免费在线观看| 欧美日韩在线一区二区| 你懂的在线视频| 欧美亚洲一级片| 卡通动漫国产精品| 免费高清一区二区三区| 国产精品系列在线播放| 欧美性生交大片| 欧美午夜一区二区三区免费大片| 水莓100在线视频| 国模私拍视频一区| **爰片久久毛片| 亚洲精品国产suv一区88| 国产一区视频网站| 极品魔鬼身材女神啪啪精品| 欧美日韩国产一二三| wwwww在线观看免费视频| 日本精品视频在线观看| 欧美午夜寂寞| 少妇无码av无码专区在线观看| 顶级嫩模精品视频在线看| 欧美成人免费观看视频 | 色丁香婷婷综合久久| 欧美激情亚洲另类| 成人av综合网| 被灌满精子的波多野结衣| 成人av免费在线观看| 欧美三级韩国三级日本三斤在线观看| 亚洲第一视频网站| 97人人在线视频| 久久国产精品 国产精品| 国产一区二区高清| 中文字幕国产专区| 欧美午夜片在线看| 老司机一区二区三区| 久久精品午夜福利| 91美女片黄在线| 在线天堂中文字幕| 亚洲人成毛片在线播放| 不卡亚洲精品| 警花观音坐莲激情销魂小说| 国产盗摄女厕一区二区三区| 久久久久久久福利| 日韩精品在线免费播放| 欧美黑人疯狂性受xxxxx野外| 欧美日韩精品综合| 奇米精品一区二区三区在线观看一| 欧美精品日韩在线| 欧美一区二区三区影视| 久久电影网站| 久久国产精品99久久久久久丝袜| 久久精品道一区二区三区| 99久久99久久精品免费| 91麻豆精品国产91久久久久| 国产美女福利在线观看| 欧美日韩国产综合在线| 精品中文字幕一区二区| 成人免费看片98| 亚洲欧美国产精品久久久久久久 | 日韩一区精品字幕| fc2ppv在线播放| 精品成人佐山爱一区二区| 欧美片第一页| 日本在线视频www色| 26uuu久久天堂性欧美| 一个人看的www日本高清视频| 欧美激情三级免费| 国产精品一线天粉嫩av| 激情成人在线观看| 欧美性猛交xxxxx水多| 欧美96在线| 欧美黑人xxxxx| 国产精品888| 狠狠狠狠狠狠狠| 欧美高清在线播放| 精品成人影院| 国产精品偷伦视频免费观看了 | 欧美日韩精品区别| 精品毛片网大全| 大地资源网3页在线观看| 欧美日韩亚洲免费| 丁香五精品蜜臀久久久久99网站|