???????? ? Windows Azure Active Directory

Сервисом для осуществления сценариев аутентификации в Windows Azure является Windows Azure Active Directory. Этот сервис не является полным аналогом локального Active Directory, скорее он расширяет локальный каталог в облако, его «зеркалом».

Windows Azure Active Directory состоит из трех основных компонентов: REST-сервиса, с помощью которого можно создавать, получать, обновлять и удалять информацию из каталога, а также использовать SSO (в случае интеграции с Office 365, Dynamics, Windows Intune, например); интеграции с различными провайдерами идентификации типа Facebook и Google, а также библиотеки, упрощающей доступ к функциональности Windows Azure Active Directory.

Сейчас Windows Azure Active Directory предоставляет удобный доступ к следующей информации:

Пользователи: пароли, политики безопасности, роли.

Группы: Security/Distribution-группы.

И другой основной информации (например, о сервисах). Всё это предоставляется с помощью Windows Azure AD Graph — социального корпоративного графа с интерфейсом, поддерживающим REST, с представлением проводника для легкого обнаружения информации и связей.

image

Когда вы хотите интегрироваться с локальной инфраструктурой под управлением AD, вам необходимо установить и настроить Active Directory Federation Services Version 2. WAAD имеет полную поддержку ADFS.

Давайте посмотрим на примере, как использовать WAAD для настройки SSO в ASP.NET приложении. Ниже мы создадим новый тенант WAAD на Windows Azure, интегрируем тенант с MVC-приложением, настроим SSO и воспользуемся Graph AD API.

Что нужно для того, чтобы повторить демо:

· Подписка Windows Azure – хватит триала: free trial

· Visual Studio 2012 Professional или Visual Studio 2012 Ultimate – можно и VS 2013, но процесс будет немного другим

· Identity and Access Tools for Visual Studio 2012

· WCF Data Services 5.3 Tools

Создадим тенант WAAD на Windows Azure. Зайдем на https://manage.windowsazure.com и выберем Active Directory справа. Нажмем ADD.

image

Название каталога должно быть уникальным, так как является публичным. Регион – Россия. Регион должен соответствовать не тому, где находитесь вы, а тому, в котором будет находиться организация, так как именно в этом регионе, с его юрисдикцией и прочим будет создан тенант.

image

После создания тенанта он будет настроен для сохранения данных о пользователях в облаке. Можно WAAD синхронизировать и с локальной AD, но это задача исключительно инфраструктурная. Если перейти на вкладку Пользователи уже внутри тенанта, то мы увидим, что туда был автоматически добавлен пользователь-создатель.

image

Добавим еще одного пользователя.

image

Добавление пользователя – процесс, состоящий из трех шагов: типа учетной записи пользователя…

image

… Его роли в организации и тенанте…

image

… и установке временного пароля.

image

Создадим новый пароль и завершим настройку нового пользователя. Под этим пользователем и будем заходить в систему позже.

Теперь зарегистрируем MVC-приложение в тенанте WAAD. Создадим ASP.NET MVC 4 приложение типа Intranet. В Properties проекта установим SSL Enabled в True. Скопируем SSL URL.

image

Это нужно для того, чтобы обезопасить передачу контента, поскольку HTTP не обеспечит должного уровня для сохранения, например, токенов безопасности.

Установим использование Local IIS Web Server как сервер в настройках проекта. Вставим скопированный SSL URL в поле Project URL.

image

Добавим наше приложение в тенант на портале. На портале нужно перейти во вкладку APPLICATIONS внутри тенанта и нажать Добавить

image

Приложение должно быть типа “разрабатываемое моей организацией”.

image

На первом шаге добавления приложения нужно ввести его название, оставив тип таким же (Веб-приложение).

На втором шаге нужно вставить в URL-АДРЕС ВХОДА и URI КОДА ПРИЛОЖЕНИЯ скопированный в VS SSL URL.

image

URL-адрес входа – это адрес вашего приложения, используется внутри WAAD для редиректов пользователя с WAAD обратно на ваше приложение.

URI кода приложения – это идентификатор приложения, который должен быть обязательным внутри тенанта, так как используется для служебных целей WAAD.

Все, приложение зарегистрировано. Теперь скопируем URL-АДРЕС ДОКУМЕНТА МЕТАДАННЫХ ФЕДЕРАЦИИ из раздела РАЗРЕШИТЬ ПОЛЬЗОВАТЕЛЯМ ВХОД.

image

Этот URL нужно для подключения приложения к WAAD. То есть сейчас мы сделали так, что сторона сервера знает о приложении, но еще не сделали так, чтобы приложение знало о сервере. Здесь нам поможет инструмент VS 2012, называющийся Identity And Access. Кстати, этот инструмент не появится для проекта до тех пор, пока проект не будет ориентирован на использование .NET Framework 4.5.

Вызовем Identity And Access.

image

Дальше нам необходимо очень аккуратно произвести настройку нескольких параметров. На шаге Providers выбираем Use a business identity provider (тут можно использовать и другие типы, но нужные настройки будут только при выборе второй опции) и вставляем скопированный с портала URL. Этот URL ведет на файл с метаданными федерации, что позволяет “подружить” приложение со спецификацией и метаданными нашего тенанта.

image

Нажмем OK. Произошло изменение web.config – теперь приложение знает, куда обращаться за процессом аутентификации пользователей.

Теперь немного попрограммируем. Откроем HomeController.cs и заменим метод Index на нижеуказанный код. Потребуется разрезолвить некоторые зависимости.

public ActionResult Index()
{
ClaimsPrincipal cp = ClaimsPrincipal.Current;
string fullname = string.Format(“{0} {1}”, cp.FindFirst(ClaimTypes.GivenName).Value,
cp.FindFirst(ClaimTypes.Surname).Value);
ViewBag.Message = string.Format(“Dear {0}, welcome to the Expense Note App”, fullname);
return View();
}

ClaimsPrincipal в объектной модели .NET 4.5 – это любая сущность, которая хочет (или уже) аутентифицироваться в конечной системе.

В Global.asax в обработку события Application_Start добавим следующую строку:

AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;

Запустим приложение и согласимся с тем, что есть проблема с сертификатом. Вся проблема заключается в том, что сертификат самоподписанный. Будет полноценный сертификат, проверенный центром – и ошибки не возникнет.

Произошел редирект на WAAD. Залогинимся в систему под пользователем, которого создали ранее в тенанте.

image

Мы вошли в систему. Обратите внимание, что приложение автоматом скоммуницировало с каталогом тенанта и получило информацию о пользователе.

image

Хорошо, когда есть возможность залогиниться. Раньше были некоторые вопросы, связанные с тем, как сделать кнопку Sign Out и правильно разлогинить пользователя. Давайте сделаем это, создав контроллер SignOutController и добавим код, приведенный ниже. Зависимости сразу не разрезолвятся – в референсы проекта надо будет добавить сборку System.Identitymodel.Services.

image

Код:

public ActionResult Index()

{

return View(“SignOut”);

}

public void SignOut()

{

WsFederationConfiguration fc =

FederatedAuthentication.FederationConfiguration.WsFederationConfiguration;

string request = System.Web.HttpContext.Current.Request.Url.ToString();

string wreply = request.Substring(0, request.Length – 7);

SignOutRequestMessage soMessage =

new SignOutRequestMessage(new Uri(fc.Issuer), wreply);

soMessage.SetParameter(“wtrealm”, fc.Realm);

FederatedAuthentication.SessionAuthenticationModule.SignOut();

Response.Redirect(soMessage.WriteQueryString());

}

}

Добавим в папку Views папку SignOut и представление для SignOut. Внутри можем написать что угодно – это будет страница, появляющаяся после окончания выхода из системы.

Добавим кнопку для Sign Out в общую страницу Layout.cshtml.

<section id=”login”>
@if (Request.IsAuthenticated)
{
<text>Ты внутри системы, <span class=”username”>@User.Identity.Name</span>!
@Html.ActionLink(“Signout”,”SignOut”, “SignOut”)</text>
}
else {
<text> Ты вне системы. </text>
}
</section>

Запустим проект и протестируем то, что получилось:

image

Нас перебросит на аутентификацию WAAD. Если вас устраивает такое поведение – ничего страшного. Если хочется все-таки видеть представление, созданное выше, то надо добавить немного кода в web.config:

<configuration>

<location path=”FederationMetadata”>
<system.web>
<authorization>
<allow users=”*” />
</authorization>
</system.web>
</location>
<location path=”SignOut”>
<system.web>
<authorization>
<allow users=”*” />
</authorization>
</system.web>
</location>
</configuration>

Вот и все – мы использовали WAAD для того, чтобы аутентифицировать простого пользователя в системе. В процессе мы также немного попрограммировали, чтобы приложение получало из запрошенного токена безопасности от WAAD данные о пользователе.

Давайте теперь посмотрим на Graph API. Скачаем вспомогательную библиотеку по ссылке http://go.microsoft.com/fwlink/?LinkID=290812 и добавим ее как существующий проект в наш проект.

image

В web.config основного проекта добавим две настройки с соответствующими значениями (эти значения берутся со вкладки настройки настроенного приложения в тенанте WAAD):

<appSettings>
<add key=“ClientId” value=“[CLIENT-ID]“/>
<add key=“Password” value=“[APPLICATION-KEY]“/>

<appSettings>

Теперь нужно обновить библиотеки в основном проекте:

· Microsoft.Data.Edm,

· Microsoft.Data.OData

· System.Spatial

Эти библиотеки нужно обновить с 5.2.0. Сначала удалим их из References, затем, загрузив новую версию по ссылке http://www.microsoft.com/en-us/download/details.aspx?id=36516, подключим заново.

Добавим в основной проект проект GraphHelper, добавленный ранее в решение.

image

Все, теперь мы можем поспрашивать наш тенант с помощью Graph API. Добавим немного кода в HomeController:

public ActionResult Users()
{
//get the tenantName
string tenantName = ClaimsPrincipal.Current.FindFirst(“http://schemas.microsoft.com/identity/claims/tenantid”).Value;
// retrieve the clientId and password values from the Web.config file. Accomplished in previous step.
string clientId = ConfigurationManager.AppSettings["ClientId"];
string password = ConfigurationManager.AppSettings["Password"];
// get a token using the helper
AADJWTToken token = DirectoryDataServiceAuthorizationHelper.GetAuthorizationToken(tenantName, clientId, password);
// initialize a graphService instance using the token acquired from previous step
DirectoryDataService graphService = new DirectoryDataService(tenantName, token);
// get Users
//
var users = graphService.users;
QueryOperationResponse<User> response;
response = users.Execute() as QueryOperationResponse<User>;
List<User> userList = response.ToList();
ViewBag.userList = userList;
// For subsequent Graph Calls, the existing token should be used.
// The following checks to see if the existing token is expired or about to expire in 2 mins
// if true, then get a new token and refresh the graphService
//
int tokenMins = 2;
if (token.IsExpired || token.WillExpireIn(tokenMins))
{
AADJWTToken newToken = DirectoryDataServiceAuthorizationHelper.GetAuthorizationToken(tenantName, clientId, password);
token = newToken;
graphService = new DirectoryDataService(tenantName, token);
}
// get tenant information
//
var tenant = graphService.tenantDetails;
QueryOperationResponse<TenantDetail> responseTenantQuery;
responseTenantQuery = tenant.Execute() as QueryOperationResponse<TenantDetail>;
List<TenantDetail> tenantInfo = responseTenantQuery.ToList();
ViewBag.OtherMessage = “User List from tenant: ” + tenantInfo[0].displayName;
return View(userList);
}
}

Добавим еще одно представление в папку Home, назвав его Users. Добавим в него код:

@model IEnumerable<Microsoft.WindowsAzure.ActiveDirectory.User>
@{
ViewBag.Title = “Users”;
}
<h1>@ViewBag.Message</h1>
<h2>@ViewBag.OtherMessage</h2>
<table>
<tr>
<th>
DisplayName
</th>
<th>
UPN
</th>
<th></th>
</tr>
@if (User.Identity.IsAuthenticated)
{
foreach (var user in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => user.displayName)
</td>
<td>
@Html.DisplayFor(modelItem => user.userPrincipalName)
</td>
</tr>
}
}
</table>

В _Layout.cshtml добавим еще один пункт в меню:

<nav>
<ul id=”menu”>
<li>@Html.ActionLink(“Home”, “Index”, “Home”)</li>
<li>@Html.ActionLink(“About”, “About”, “Home”)</li>
<li>@Html.ActionLink(“Contact”, “Contact”, “Home”)</li>
<li>@Html.ActionLink(“Users”, “Users”, “Home”)</li>
</ul>
</nav>

Запустим проект и перейдем на вкладку Users.

Если возникает проблема с Insufficient privilegies, то действуем по инструкции, приведенной здесь: http://code.msdn.microsoft.com/windowsazure/Write-Sample-App-for-79e55502/view/Discussions

Резюме

Мы посмотрели, каким образом использовать Windows Azure Active Directory для обеспечения аутентификации пользователя и получении данных о нем из каталога в облаке. Возможности WAAD гораздо шире – например, все то же самое можно делать, синхронизировав каталог в облаке с локальным каталогом. Еще мы посмотрели, как работает Graph AD API.

Explicit DBO permissions on TempDB for a domain group

To do this we created a stored procedure and added it as a startup procedure so that whenever the SQL server service is restarted then the stored procedure will automatically grant the access to the group on the tempdb.

Add the domain group to the SQL server logins and then create the following procedure:

create proc sp_grant_access

as 
exec
tempdb..sp_grantdbaccess ‘ggaurav03tim’,’g22′ 

 exec
tempdb..sp_addrolemember ‘db_owner’,’g22′ 

go 

sp_procoption ‘sp_grant_access’,’startup’, ‘on’

 

Happy Learning & Troubleshooting!!

Disclaimer:  Everything here, is my personal opinion and is not read or approved by Microsoft before it is posted. No warranties or other guarantees will be offered as to the quality of the opinions or anything else offered here.

??? Windows 8.1 ? HCK QFE 008 ????????

HCK 2.1 QFE 008 引入了一个已造成广泛影响的 Bug – 影响尝试重新打包或合并 .hckx 程序包的客户。由于 QFE 008 可能会阻止认证提交过程,我们已将它从 HCK 下载页移除并恢复为 QFE 007。 

我如何知道是否遇到该 Bug?

如果您使用 QFE 008 创建了一个程序包并尝试重新保存或合并该程序包,那么您可能会遇到该问题。出现的错误将类似于以下 HCK Studio 异常:

System.ArgumentNullException: Value cannot be null.

Parameter name: inArray

求助!我已经安装了 QFE 008 并且我需要合并和/或重新打包我的 .hckx 文件

1.在当前 HCK 控制器之外的另一台计算机上,从 HCK 下载页下载适用于 Windows 8.1 的 HCK,并选择只安装 HCK Studio 的选项。这将安装 QFE 007。

2.打开命令提示符并运行下面的命令,以便将现有的“Enterprise”和 Connect.xml 文件从 HCK 控制器上的 Studio 目录复制到一个可移动驱动器。在本例中,可移动驱动器盘符是 H

a. robocopy /MIR “%wttstdio%Enterprise” H:Enterprise

b. copy “%wttstdio%Connect.xml” H:

3.将可移动驱动器(本例中为 H:)移到您在第 1 步中安装了 HCK Studio 的计算机。

4.打开命令提示符并运行下面的命令,以便将“Enterprise”和 Connect.xml 文件复制到新计算机。

a. robocopy /MIR H:Enterprise “%wttstdio%Enterprise”

b. copy H:Connect.xml “%wttstdio%”

5.启动 HCK Studio。现在,您可以从 HCK 控制器系统打开现有项目并保存新程序包。您将能够重新保存和合并您创建的新程序包而不会出现错误。

我已经安装了 QFE 008,我应该恢复到 QFE 007吗?

不建议这么做,因为如果这么做,所有与 QFE 008 关联的数据都将丢失。

我不介意会丢失数据,如何恢复到 QFE 007?

这需要完全卸载 HCK 控制器,卸载过程会移除数据库以及所有关联的测试结果。完成这一步后,下载 QFE 007

何时推出修补程序?

QFE 009 将包含 QFE 007 和 QFE 008 中的所有修补程序,并且不会再包含此 Bug。

求助!我需要 QFE 008,因为它包含的修补程序可以帮助我清除系统认证障碍。

我们知道 OEM 和系统供应商可能需要 QFE 008,因为它包含的几个重要修补程序可以清除系统认证障碍。因此,我们在下面提供了 QFE 008 的下载链接。在下载之前,请花时间了解 QFE 008 中这一 Bug 的影响。

下载 HCK 2.1 QFE 008

Edward Snowden on the defensive?

I was reading in the New York Times the other day an article entitled Snowden Defends Query to Putin on Surveillance. The article references a question-and-answer session with Russian President Vladimir Putin. In the interview, Snowden shows up unexpectedly and asks President Putin and asks him whether or not Russia engages in the same sort of unlawful surveillance that the NSA participates in.

Putin jockeys with him jokingly for a bit, saying that they’re both intelligence agents, and then denies it. They don’t have the money to do it, and their intelligence gathering is governed by society and by law. In other words, Russian intelligence agencies are more ethical than US intelligence agencies.

American journalists were quick to criticize Snowden. Just how, exactly, did he manage to conveniently show up on this telethon to ask President Putin these questions? The underlying message is that Snowden is being used as a propaganda piece for the Russian government, willingly or unknowingly. While pointing his arrows at the US for intelligence gathering practices he finds unethical (and the morality of which is still ambiguous, at least in the United States [you may disagree with my assessment but there is not universal condemnation]), how can he clearly miss the unethical actions that Russia is taking in Ukraine, first by annexing Crimea and then threatening to invade Ukraine, or at least causing unrest?

In other words, the criticism is that Snowden is picking-and-choosing at whom he feels outrage; it is hypocritical to give the Russian government a chance to showcase their moral superiority at the expense of the US, while ignoring the Russian government’s current transgressions.

image

Snowden disagrees with this. He flat out denies it:

Calling Mr. Putin’s answer evasive, Mr. Snowden wrote that he was “surprised that people who witnessed me risk my life to expose the intelligence practices of my own country could not believe that I might criticize the surveillance policies of Russia, a country to which I have shown no allegiance, without ulterior motive.”

He also noted that a Russian investigative journalist, Andrei Soldatov, “perhaps the single most prominent critic of Russia’s surveillance apparatus” described his question as “extremely important for Russia.”

As soon as I read this, many red flags went up in my mind.

For you see, a few years ago I started studying up on deception – how humans do it and how to detect it. There’s no sure-fire way to tell when someone is lying, but with training you can get it right 80-90% of the time (without training you can get it right 53% of the time, roughly equal to a coin flip).

People don’t like to be labeled as deceivers. We have a great need to feel consistent and will often explain things to ourselves in order to convince ourselves of our actions to make that cognitive dissonance go away.

I am not an expert in detecting deception, nor am I a trained analyst. But I have read many books and Snowden’s answers jumped out at me with their obviousness.

What follows is what I think:

  1. The first red flag – Look at the past good things I have done!

    When someone is accused of something and they change the subject by bringing up past examples of good behavior, that is suspicious. This is known as a “convincing statement.”

    For example, suppose the police were interrogating a suspect about breaking-and-entering and he says “You know, this past weekend I was helping out at the homeless shelter.” The idea is to deflect suspicion by creating a halo effect – the tendency for us to believe that good characteristics about a person spills over into all traits about that person. Surely someone who helps out selflessly to assist the homeless would not commit a crime! But that this person helps the homeless does not mean they could not break-and-enter.

    Look at Snowden’s response: he risked his life to expose the intelligence practices of his own country. That was a very ethical thing to do, so why would he do such an unethical thing and appear as a propaganda piece for the Russian government now?

  2. The second red flag – you haven’t seen me do anything

    Snowden issued a non-specific denial: Russia is a country to which he has shown no allegiance. If the “no” statement is delivered in a way that’s open ended but overly specific, that can be a sign of deception. Snowden said he has not shown any allegiance, without ulterior motive. That is subtle; it doesn’t mean he has none, nor has no ulterior motive, only that others can’t see it.

  3. The third red flag – Turning around the accusations

    When someone is caught in a lie, they will often flip around the question and attack the accuser. In this case, Snowden expresses surprise that people who saw him do such a heroic action now can’t believe that he would break from his past ethical actions. In other words, they should be ashamed of themselves for not trusting his character.

  4. The fourth red flag – Redirection with an appeal to authority

    This one is not as strong, but Snowden dismisses the attack against him by appealing to another journalist who has similarly criticized Russia’s surveillance state, and this journalist says that Snowden’s question is very important.

    Snowden’s question is important, yes, but that is not what we are discussing; we are discussing whether or not this question-and-answer session was staged and whether or not Snowden is being used by the Russian government to further its own public relations.

Regardless of what you think of Snowden – that he’s a hero for exposing a corrupt government or that he is a traitor for giving away trade secrets – my view is that his most recent critics for this Putin Q&A session struck a nerve that he had to defend himself. But the way he phrased it indicates to me that he is hiding something. Maybe he realizes now that he initially thought he was asking Putin a hard question but upon further reflection, that he was used to further the Russian agenda and now has to rationalize what he did… but can’t admit it.

Or perhaps I am wrong and he actually means what he says and the red flags I detected are false positives.

I guess that depends on what I want to believe.

?????

寓教于乐,轻松掌握 Windows Apps 和 Cloud

//Build/ 2014 开发者大会第二天重点整理 ()

//Build/ 2014 开发者大会第二天的主题演讲主要包含两部分:Microsoft Azure 的发展状况,以及 .NET 和生态系统的发展介绍。第二天的重点整理也由此分为上下两部分。您可以在 Channel 9 上观看完整的视频。

Microsoft Azure 近况

  • 这一天的主题演讲由 Microsoft 云与企业工程组的新任总裁 — Scott Guthrie 主讲,他首先介绍截止到 2014 年底,Microsoft Azure 将在全球拥有 16 座数据中心(持续扩建中):

                                 Microsoft Azure 的数据中心遍及全球各地

  • 然后介绍 Microsoft Azure 这个云平台的现况:

                       Microsoft Azure 目前(截止到 2014年04月)的发展状况

  • 接下来是 TITANFALL 的游戏制作团队进行产品展示,这款游戏的会话(session)均通过 Azure 处理,使用了超过 10 万台 Azure 虚拟机。

                      TITANFALL 游戏团队使用 Microsoft Azure 来处理游戏会话

  • 此外,除了 2012 年伦敦夏季奥运会之外,最近的 2014 年索契冬季奥运会也使用了 Microsoft Azure 进行在线直播,Microsoft Azure 的媒体服务(Media Services)能够协助在线编码,并且可以制作出能同时在 Web 或移动设备上观看的视频文件。这届奥运会共计吸引了全球超过 1 亿位用户观看,最高的同时在线观看人数达到 210 ,所观看的都是高清视频。

              2014 年的索契冬季奥运会也使用了 Microsoft Azure 协助在线视频服务

Microsoft Azure IaaS

  • 在这一方面,首先介绍 Visual Studio 与 Microsoft Azure 虚拟机服务的集成。现在,创建虚拟机管理虚拟机或是远程调试虚拟机上的应用程序都可以直接在 Visual Studio 中执行。

                               Visual Studio Azure VM 操作的集成

  • Microsoft Azure 现在还支持对正在运行的虚拟机进行映像捕获(VM Capturing),并且可以使用此映像创建另一个虚拟机,其状态与捕获映像的虚拟机状态相同。

                                                 使用虚拟机映像创建另一个虚拟机                

  • 在管理 Microsoft Azure 方面,除了 PowerShell DSC 之外,还可以使用 PuppetChef 等工具管理云上的虚拟机。

                                       Microsoft Azure 虚拟机支持多种管理工具

  • 接下来的演示旨在介绍 Visual Studio 集成远程调试,您可以直接在 Visual Studio 中附加 Azure 上所指定虚拟机的某个进程来进行调试,以强化 Azure 并将其用作您的开发/测试环境。

          在新的 Azure SDK 中,Visual Studio 可以直接附加 Azure 上虚拟机的进程来进行调试

  • 此演示是使用 PowerShell 捕获虚拟机的映像,并且使用已捕获的映像创建新的虚拟机。

                            使用 PowerShell 捕获 VM 映像并创建 VM

  • 接下来,Microsoft Azure 与 Puppet Labs 宣布互相合作,从此您可以使用 Puppet Labs 的技术来管理 Azure 上的虚拟机

                                 Puppet 可以同时管理 Azure 上的数台虚拟机

                             在 Azure 上创建虚拟机时可以安装 Puppet Agent

                                                                Puppet 控制台的屏幕

  • 知名的高质量图库网站 Getty Images 也介绍了使用 Microsoft Azure 的心得。

                                          Getty Images 使用 Microsoft Azure

  • 最后,发布了 Microsoft Azure 在 IaaS 方面的新功能。

              //Build/ 2014 开发者大会发布的 Microsoft Azure IaaS 方面的新功能

Microsoft Azure PaaS (Web)

  • Microsoft Azure 网站服务可以使 Web 开发人员将开发好的 Web 应用程序快速放置到云上,该程序支持多种程序语言,具有多种部署机制。在此次介绍中还新增了支持 Java 的功能。

                                   Microsoft Azure 网站支持多种程序语言和部署方式

  • Microsoft Azure 网站服务可以使 Web 开发人员将开发好的 Web 应用程序快速放置到云上,该程序支持多种程序语言,具有多种部署机制,可以根据网站流量自动伸缩���也可以设置 staging/production 环境分离部署测试。在此次介绍中还新增了支持 Java 的功能。

                                     Microsoft Azure 网站支持多种程序语言和部署方式

                                     Microsoft Azure 网站支持自动伸缩

                              Microsoft Azure 网站支持 Staging/Production

  • 网站应用程序有时需要在后台运行一些程序,或是将比较耗时、适合批次执行的作业等等放在后台执行。Microsoft Azure 网站的 Web Jobs 机制可使您在后台执行程序,您可以使用 queue 的方式与网站应用程序通信。

                                         通过 Web Jobs 可以在后台执行程序

  • Azure 网站还可以连接到 Traffic Manager 以分散不同流量的网站实体,也可以跨区域分配网站流量,这也是 Scale 网站的服务方法之一。

  • 演示 Azure 网站时,还展示了以下情形:即使在 IE11 的开发人员工具中修改了 CSS 内容,也可以返回到 Visual Studio 编辑器中(处于调试状态)

                              IE11 的开发人员工具可以返回到 Visual Studio 编辑器

 

  • //Build/ 2014 开发者大会发布了在 Azure 网站方面的新功能。大家期盼已久的 CDN 也正式上市了。

Microsoft Azure PaaS(移动服务) (由世纪互联运营的Microsoft Azure平台暂时不提供此服务)

  • 移动服务可使您专注于开发各种移动平台设备的应用程序,从而可以在后端(云)平台上享受便捷的服务,它提供了移动应用程序的一些常用功能,可以直接通过 SDK 或 (RESTful) API 呼叫使用。如果要自定义后端操作,也可以使用 .net 或 nodejs 进行改写。

                                 移动服务的后端可以使用 .net 或 nodejs 改写

  • 在数据存储方面,移动服务除了支持 SQL 数据库之外,还支持 MongoDB 或 Azure 存储的 Table Service 之类的 NoSQL 数据存储机制。

                                                     数据存储支持 SQL 和 NoSQL

  • 除了支持通知推送服务之外,Azure 移动服务也支持多种身份验证(如:facebook)机制,现在还支持 Active Directory,使企业在开发企业应用程序时也能使用移动服务。

                                       移动服务开始支持 Active Directory

  • 其次,移动服务还新增了支持 Office 365 API 的功能,您可以通过移动服务开发更多有趣的企业应用程序。(例如在移动服务后端将数据写入 OneDrive 或 OneNote 等等…)

                                          移动服务开始支持 Office 365 API

  • 即使要通过 Xamarin 这样的工具来开发跨移动设备平台应用程序,也能够使用移动服务。

                                               移动服务也可以在使用 Xamarin 时使用

  • DocuSign 介绍其 iOS 应用程序如何使用 Azure 移动服务完成身份验证和数据存储。

                                  DocuSign 的 iOS 应用程序使用了 Azure 移动服务

  • 最后,//Build/ 2014 开发者大会发布了在 Azure 移动服务方面的新功能。

                     //Build/ 2014 开发者大会发布的 Azure 移动服务方面的新功能


下一篇将补充完整关于 Azure SQL 数据库、新的管理后台、.NET 发展近况和 Microsoft 开发生态系统的内容。

//Build/ 2014 开发者大会第二天重点整理 ()

本文将接续上一篇的内容。

Microsoft Azure SQL 数据库

  • 现在,Azure 内存中的 SQL 数据库提供 500GB 的方案(Premium 级别),其中包含 99.95% ��� SLA(结束预览)。

  • 此外,现在 Azure 还提供可返回到任何时间点的数据库!

                              若不慎损坏 SQL 数据库,则可以随时返回到先前的版本

 

  • Azure 还支持跨地域冗余的备份机制。设置这样的跨地域备份机制后,如果主要的数据中心发生异常,系统就会主动切换到备份的数据中心继续提供服务。

                                      Azure SQL 数据库可以设置为使用跨地域冗余备份

                 主要的数据中心发生异常时,可以切换到备份的数据中心

 

  • 总结了 //Build/ 2014 开发者大会发布的 Azure 数据方面的新功能,例如 HDInsights 支持。

                                                        Azure Data 的新增功能总结

Core .NET

  • 接下来,由 Anders Hejlsberg 介绍 .NET 平台的发展状况,首先是 .NET 编译器平台“Roslyn”项目,它提供了针对 C# 和 VB.net 的程序代码分析,并将其编译成本地代码。

  • Roslyn 不仅可以在 Windows 平台上运行,在 Mac 上使用 Mono 项目时,也可以运行 Roslyn。

                                          使用 Mono 时也可以运行 Roslyn

  • 公布了 .NET Foundation 这一组织,该组织专注于 .NET 平台上的开源项目。

Microsoft Azure 新管理界面  ((由世纪互联运营的Microsoft Azure平台暂时不提供此服务)

                                                     新的 Microsoft Azure Portal

  • 新的管理界面与 Visual Studio Online 的连接更为深入。

                     新的 Microsoft Azure Portal 与 Visual Studio Online 连接更深入

  • 能够直接在后台改写代码,然后再进行登录。

                           新的 Microsoft Azure Portal 可以在后台直接改写代码

 

  • 新的仪表板与大屏幕更为契合
  • Azure 改名后,官方网站的网址也随之更新。

 

Microsoft 开发人员生态系统

 

  • 在这一部分中,Microsoft「头号传教士」Steven Guggenheimer 介绍了 Microsoft 与开发人员的互动,他首先提到目前开发人员的世界是非常广阔的,具备了云、设备和各种场景下的应用程序。

 

  • 而与开发人员的互动,需要顾及他们过去(在技术上)的投资,因此在初期就考虑提供云和移动设备,当然更重要的是,帮助他们在业务方面获得成长。

 

  • 接下来的演示旨在展示 Microsoft 如何在不同场景下运用应用程序,有兴趣的用户可以仔细观看这部分的视频,内容相当精彩,此处就不一一整理了。

Importance of Primary Host Controller in SharePoint Search 2013

The SearchHostController is related to the SearchServiceInstance. SearchHostController manages the search components that run on a server, and maintains a local repository for linguistic dictionaries.

The search components retrieve the linguistic dictionaries from the PrimaryHostController.

So it is important that Only Search nodes be made as PrimaryHostController in order for Custom Dictionary deployment jobs and dictionary imports to work successfully.

If search node {best practice recommendation is to make primary admin as PrimaryHostController} is not made as PrimaryHostController, you might see logs similar to below combined with failed dictionary deployment jobs

Search Linguistic Processing 65 Warning Dictionary deployment failed. SearchComponent: OWSTIMER.EXE, CorrelationId: 69657aa7-fa2a-45fd-983e-e0fa2f079e27, SearchServiceApplication: {cc53be81-7382-45f5-a719-a89891846f6f}, DictionaryName: Microsoft.UserDictionaries.EntityExtraction.Companies.Inclusions, Component:FlowExecution, FailureMessage: Deployment (flow:Microsoft.CustomDictionaryDeployment) for custom dictionary c866ca65-f095-4a16-9249-028d500f7703 did not complete successfully. Flow execution state was: Failed. Failure: Evaluation failure. An evaluation thread threw an exception. (Exception type: Microsoft.Ceres.Evaluation.DataModel.EvaluationException. Exception message: Evaluation failed in operator RepoWriter of type DictionaryRepositoryWriter), Cause: Microsoft.Ceres.ContentEngine.Services.ContentIntegrationEngine.FailCauseException: Evaluation failed in operator RepoWriter of type DictionaryRepositoryWriter.

You would also see when you try to import a dictionary through following mechanism Dictionary imports fail

$searchApp = Get-SPEnterpriseSearchServiceApplication

Import-SPEnterpriseSearchThesaurus -SearchApplication $searchApp -Filename “.thesaurus.csv”

Expected: Dictionary imported successfully

Actual: PowerShell.exe (0×10214) 0x104B8 Search Linguistic Processing 129 Information Dictionary import cmdlet failed. SearchComponent: PowerShell.exe, CorrelationId: b3a69b93-a42e-4c63-b8fe-5f766848a64d, SearchServiceApplication: b3932f1a-d626-4907-9fe5-013363c3a229, DictionaryName: Microsoft.UserDictionaries.Thesaurus, Failure: Failed to import custom dictionary Microsoft.UserDictionaries.Thesaurus. Failure: Evaluation failure. An evaluation thread threw an exception. (Exception type: Microsoft.Ceres.Evaluation.DataModel.EvaluationException. Exception message: Evaluation failed in operator DictionaryRepositoryWriterLangInDependent of type DictionaryRepositoryWriter).. 018c8918-f800-0003-f09a-5dd0ac78ce01

In order to address these issues, please make sure search node is running as PrimaryHostController.

You can verify which node in the farm is running as PrimaryHostController, by running below command. You will see PrimaryHostController set to true on only one node in the FARM.

clip_image002

If that node {running PrimaryHostController} is not a search node, that could cause problems noted above.

To fix the issue make search’s Primary admin node as Primary Host Controller. You can verify which is Primary Admin node by going to CA | Manage Service Application | Search Service Application and you will see screen like below

clip_image004

Now go to that Search Admin node and make that as PrimaryHostController through below commands

clip_image006

Our best practice recommendation is to make Search Primary admin node as Primary Host Controller always.

POST BY: Srinivas Dutta [MSFT]

Microsoft Avro ???????????????

このポストは、4 月 14 日に投稿された Announcing release of Microsoft Avro Library の翻訳です。

このたび、マイクロソフトは Microsoft Avro ライブラリをリリースしました。このライブラリはマイクロソフト社内の複数のチームが共同で開発したもので、Azure HDInsight サービスおよびオープン ソース コミュニティに対する Avro のシリアル化フォーマットを、完全かつ高パフォーマンスな形で .NET に実装します。

今回のリリースのダウンロード

Avro ライブラリは、NuGet ギャラリーから入手できます。Visual Studio では、NuGet ギャラリーからダウンロードするか、NuGet Package Manager で次の文を実行すると、パッケージのインストールまたは更新が可能です。

Install-Package Microsoft.Hadoop.Avro
(コマンドの詳細はこちら、英語)

ソース コードは、Apache 2.0 のライセンスに基づいて CodePlex (英語) から入手できます。

Apache Avro

Apache Avro では、Thrift や Protocol Buffers と同様に、コンパクトなバイナリ データ シリアル化フォーマットを提供しますが、それ以外に、Hadoop などの分散処理環境への適応性を高める追加機能も利用できます。Avro ライブラリを使用すると、Apache Avro のデータ シリアル化の仕様を .NET 環境に実装できます。

サポートされる機能

Avro ライブラリは、インメモリの式ツリーを構築することで、任意の種類のストラクチャをシリアル化します。インメモリの式ツリーは、この特殊なシリアライザーがネイティブなパフォーマンスを発揮できるように、IL コードにコンパイルされます。

このライブラリでは、次のモードがサポートされます。

  • リフレクション モード: シリアライザーの IL コードは、.NET のスキーマの種類に基づいて、パフォーマンスが最大化されるように構築されます。
  • 汎用レコード モード: データの JSON スキーマは実行時に指定可能なため、任意のスキーマで動的データの処理に対応できます。
  • コンテナー モード: このライブラリでは、組み込みのスキーマを使用してポータブル ファイルを生成できます。ファイル形式は Avro のコンテナー ファイルの仕様と互換性があり、各種プラットフォームで使用可能です。

サンプル コード
以下は、Avro ライブラリを使用してシリアル化および逆シリアル化を行う場合のサンプルです。

関連資料

下記のドキュメントでは、詳細な情報やサンプルをご覧いただけます���