Criando aplicativos para o Windows Phone 7 com...
Transcript of Criando aplicativos para o Windows Phone 7 com...
Criando aplicativos para o Windows Phone 7 com os Produtos do SharePoint 2010 e o Unified Access Gateway
Este documento é fornecido “no estado em que se encontra”. As informações e exibições expressas neste
documento, incluindo URLs e outras referências a sites da Internet, podem ser alteradas sem aviso prévio. As
informações e exibições expressas neste documento, incluindo URLs e outras referências a sites da Internet,
podem ser alteradas sem aviso prévio.
Alguns exemplos citados neste documento são fornecidos somente como ilustração e são fictícios. Não há
nenhuma intenção, nem por dedução, de qualquer associação ou conexão real.
Este documento não oferece a você quaisquer direitos legais sobre propriedade intelectual em qualquer
produto da Microsoft. Este documento pode ser copiado e usado para fins internos e de referência. Este
documento pode ser modificado para fins internos e de referência.
Microsoft, SharePoint , Silverlight, Visual Studio e Windows Phone 7 são marcas registradas ou marcas
comerciais da Microsoft Corporation nos Estados Unidos e/ou em outros países.
© 2011 Microsoft Corporation. Todos os direitos reservados.
2
Criando aplicativos para o Windows Phone 7 com os Produtos do SharePoint 2010 e o Unified Access Gateway
Dave Pae
Microsoft Corporation
Todd Baginski
Aptillon, Inc.
Matthew McDermott
Aptillon, Inc.
Ben Ari
Microsoft Corporation
Março de 2011
Aplica-se a: Microsoft® SharePoint® Server 2010, Microsoft SharePoint Foundation
2010, Microsoft Forefront Unified Access Gateway, Windows Phone 7™
Resumo:
Este white paper aborda cenários comerciais para o desenvolvimento de aplicativos móveis que
usam os recursos dos Produtos do SharePoint 2010 para colaboração ao autenticar através do
Microsoft Forefront Unified Access Gateway (UAG). O corpo principal do paper apresenta os
conceitos e códigos necessários para acessar os dados da lista SharePoint de maneira segura
através do Windows Phone 7. O Apêndice detalha a instalação e a configuração de uma instância
do desenvolvedor do UAG para fins de teste e desenvolvimento de aplicativos móveis com os
Produtos do SharePoint 2010.
3
umário Sumário ............................................................................................................................................................ 3 Visão geral e objetivos ........................................................................................................................................ 5 Arquitetura ........................................................................................................................................................ 6
Intranet dos produtos do SharePoint 2010 ...................................................................................................... 6
UAG ........................................................................................................................................................... 6 Cenário de colaboração de Intranet ...................................................................................................................... 6
Valor comercial de colaboração ...................................................................................................................... 7
O aplicativo ................................................................................................................................................. 7 Segurança ....................................................................................................................................................... 11
Armazenamento de credenciais.................................................................................................................... 11
Autenticação ............................................................................................................................................. 11 Serviços do SharePoint ..................................................................................................................................... 12
Serviços de consumo .................................................................................................................................. 12
Acessando os dados da lista do SharePoint usando a Biblioteca de Cliente OData ............................................... 12
Atividade de RSS Feed ................................................................................................................................ 20
Serviço de Perfil de Usuário - Colegas ........................................................................................................... 23
Serviço de perfil de usuário - Dados de perfil de usuário ................................................................................. 26 Teste .............................................................................................................................................................. 29
Testando o aplicativo no emulador ............................................................................................................... 29
Testando o aplicativo em um dispositivo ....................................................................................................... 29 Considerações do Marketplace ........................................................................................................................... 29 Conclusão ....................................................................................................................................................... 33 Apêndice - Instalação e configuração do UAG para os Produtos do SharePoint 2010 ................................................. 34
1. Criar uma máquina virtual do SharePoint Server e uma máquina virtual do UAG. ........................................... 34
2. Instalar a rede do host da Máquina virtual Hyper-V .................................................................................... 35
3. Instalar a rede da Máquina virtual Hyper-V ................................................................................................ 36
4. Preparar a máquina virtual do UAG server para a instalação do UAG ............................................................. 40
5. Instantâneos da máquina virtual do UAG Server ........................................................................................ 41
6. Instalar o UAG Server ............................................................................................................................. 41
7. Instantâneos da máquina virtual do UAG Server ........................................................................................ 47
8. Configuração e ativação inicial do UAG Server ........................................................................................... 47
9. Criar o Tronco HTTP para publicar o site do SharePoint ............................................................................... 63
10. Criar um aplicativo SharePoint ............................................................................................................... 73
11. Configurar um aplicativo SharePoint ....................................................................................................... 83
12. Ativar a configuração ............................................................................................................................ 85
13. Configurar e verificar os Mapeamentos de acesso alternativo do SharePoint................................................. 87
4
14. Adicionar entradas de arquivo hosts ao ambiente de desenvolvimento ........................................................ 87
15. Testar a configuração ............................................................................................................................ 88
16. Testar o News feed RSS ........................................................................................................................ 93 Recursos ......................................................................................................................................................... 96
Forefront UAG na TechNet ........................................................................................................................... 96
Blog 'Closer to the Edge' ............................................................................................................................. 96
Blog da equipe 'Silverlight Web Services' ...................................................................................................... 96 Sobre os autores .............................................................................................................................................. 96
Todd Baginski, MVP .................................................................................................................................... 96
Matthew McDermott, MVP ........................................................................................................................... 96
Ben Ari ..................................................................................................................................................... 97
5
Visão geral e objetivos Conforme as organizações crescem e mudam, procurando acompanhar a tecnologia, seus funcionários podem se sentir desconectados da comunidade corporativa. Os produtos do Microsoft® SharePoint 2010 oferecem suporte a muitos recursos que permitem o comprometimento e a colaboração do funcionário a partir de listas e bibliotecas que armazenam e gerenciam os documentos e informações, para centralizar os perfis de usuários que permitem que os funcionários descrevam a si mesmos e a sua função na organização, para marcações e notas que facilitam o descobrimento das informações dentro de fora do firewall. O Windows Phone 7™ é a versão mais recente dos dispositivos móveis que oferece suporte para a visão da Microsoft de um local de trabalho móvel. O Windows Phone é fornecido com muitos recursos que suportam o “Office na nuvem,” incluindo aplicativos que podem abrir e ler documentos do Microsoft Office. A experiência de desenvolvimento do Windows Phone 7 foi adaptada para o desenvolvedor .NET que já possui um conhecimento sólido sobre o desenvolvimento do .NET e do Microsoft Silverlight®. Este white paper procura fazer a ligação entre o desenvolvedor do Windows Phone e o desenvolvedor do SharePoint que deseja criar aplicativos comerciais que podem aproveitar o potencial dos Produtos do SharePoint 2010 no Windows Phone.
Observação Neste white paper, produtos SharePoint 2010 refere-se ao Microsoft SharePoint® Server 2010 e ao Microsoft SharePoint Foundation 2010, exceto se especificado de outra forma. Os exemplos e cenários usam o SharePoint Server 2010.
Este papel procura esclarecer os seguintes cenários de desenvolvimento:
Como eu preparo a conexão dos produtos SharePoint 2010 a partir dos meus aplicativos Windows Phone 7?
Como eu conecto ao SharePoint através do UGA?
Como eu conecto, faço autenticação e consumo os serviços do SharePoint Web?
Como eu crio e atualizo os itens de lista do SharePoint?
Como eu consumo os RSS feeds fornecidos pelo SharePoint?
6
Arquitetura No cenário ilustrado neste white paper, Contoso possibilita que seus
funcionários conectem aos produtos do SharePoint 2010 através do UGA.
O UAG traduz o nome de host externo configurado no telefone ao nome
de host interno configurado no SharePoint e adiciona uma camada de
segurança e autenticação necessário para as organizações se protegerem
e controlarem suas propriedades corporativas da Web.
Intranet dos produtos do SharePoint 2010 A intranet da Contoso é uma implementação corporativa dos Produtos do
SharePoint 2010. Este site é configurado usando um Aplicativo de Perfil de
Usuário e Aplicativo de Serviço de Pesquisa. O aplicativo móvel usará o serviço
da Web do Serviço de Perfil de Usuário para permitir que os funcionários
vejam as informações do Perfil de Usuário em seus telefones celulares.
Para obter mais informações sobre a configuração do Aplicativo de Serviço de
Perfil de Usuário, consulte Administração do serviço de Perfil de Usuário
(SharePoint Server 2010) (http://technet.microsoft.com/pt-br/library/ee721050.aspx).
UAG Publicando um site SharePoint através de um UAG server em um ambiente de desenvolvimento envolve a
configuração de redes na máquina host Hyper-V, o servidor executando o SharePoint Server 2010 e o UAG
server, para a instalação e configuração do UAG server.
O Apêndice descreve como configurar essas redes e instalar e configurar um UAG server para publicar um
site SharePoint para o desenvolvimento do Windows Phone 7. Estas etapas são adequadas para o ambiente
de desenvolvimento ou outro ambiente de não-produção. Consulte o Guia de soluções de publicação do
SharePoint (http://go.microsoft.com/fwlink/?LinkID=206256) na TechNet ao implementar um ambiente
como este para um ambiente de produção.
Cenário de colaboração de Intranet Contoso tem muitas pessoas talentosas trabalhando em muitas áreas diferentes da produção, incluindo
farmacêutica e eletrônica. A liderança na Contoso tem uma visão de integração de pessoas e software para
não só aumentar a produtividade do ambiente de trabalho mas também, criar mais conexão na perspectiva
do funcionário. A Contoso quer que todos aproveitem a interface com os dados para habilitar uma força de
trabalho feliz e produtiva. A empresa possui uma fundação inicial forte com sua implantação dos Produtos do
SharePoint 2010. Eles vêm o SharePoint como o aplicativo corporativo central que consolida os dados de
usuário e atividades. A Contoso quer ir mais além, oferecendo uma solução de mobilidade para seus
associados. Para isto, eles querem desenvolver um aplicativo móvel que permita que os usuários vejam suas
atividades no SharePoint, acompanhem os colegas e atualize listas hospedadas na Intranet do SharePoint.
7
Valor comercial de colaboração Embora algumas empresas possam achar desafiador combinar diretamente o valor comercial aos recursos de
colaboração dos Produtos do SharePoint 2010, a Contoso encontrou um relacionamento direto entre a
conexão das pessoas entre si e a construção de um senso de comunidade com o SharePoint. Quanto mais os
funcionários se sentem conectados aos amigos no trabalho, mais felizes eles ficam para executarem suas
tarefas. Esta alegria e satisfação pelo trabalho levam a uma melhor retenção de funcionários (e facilita muito
o entrosamento de um novo funcionário). Uma melhor retenção de funcionários, reduz o custo das
contratações e aprimora o resultado de uma empresa.
O aplicativo Através do aplicativo móvel, a Contoso deseja replicar muitos dos recursos oferecidos pelo Meus Sites do
SharePoint em um navegador da Web. O fluxo do aplicativo consistirá de uma página panorâmica com caixas
de seleção para Pessoas Visualizadas Recentemente, Meu News Feed, Minhas Atividades e Meus Colegas.
Qualquer lugar em que um usuário marcar na imagem de outro usuário, o perfil do usuário selecionado
abrirá em uma nova página. Os resultados de pesquisa serão apresentados em uma caixa de seleção e a
seleção de um usuário exibirá o perfil do usuário. Figura 1 ilustra tais componentes.
Figura 1: A funcionalidade social do SharePoint que a Contoso deseja usar no seu aplicativo para o Windows
Phone 7.
Lista de tarefas pessoais Cada site pessoal possui uma lista de tarefas que o funcionário pode manter para rastrear o progresso
pessoal nas atribuições. O aplicativo conectará à lista de tarefa do site pessoal e permitirá que o funcionário
crie, atualize e exclua tarefas.
Meu News Feed O Meu News Feed (Figura 2) no Meu Site no SharePoint é o local onde os usuários podem obter as notícias
mais atualizadas sobre a empresa. Como Meu News Feed é extensível, as organizações como a Contoso pode
adicionar canais adicionais para eventos de atividades de outros sistemas.
8
Figura 2: Meu News Feed em um site do SharePoint visto em um navegador da Web.
Meus Colegas A lista de colegas mantida por um usuário (“as pessoas que eu sigo”) são um recurso valioso (Figura 3). A
Contoso quer duplicar aquela lista na experiência móvel.
Figura 3: Meus Colegas em um site do SharePoint visto em um navegador da Web.
9
O aplicativo do Windows Phone usará o controle de panorama para exibir as informações, incluindo os perfis
acessados recentemente, em um painel contínuo. (Figura 4)
Figura 4: O controle de panorama que mostra a vista holística do aplicativo do Windows Phone 7.
Cartão de perfil Ao selecionar qualquer usuário, aparecerão os detalhes do seu perfil (Figura 5). O cartão de perfil mostrará as
informações sobre o usuário na visualização móvel.
10
Figura 5: Detalhes sobre um usuário em um site SharePoint conforme visto em um navegador da Web.
Figura 6: Detalhes sobre um usuário em um site SharePoint conforme visto no aplicativo do Windows Phone 7.
11
Segurança A segurança para o desenvolvedor do Windows Phone deve ser considerada tanto nos dados a serem
transmitidos como no dados a serem armazenados. O armazenamento seguro de credenciais é obtido
através do uso de criptografia e armazenamento isolado. Para obter mais informações sobre as capacidades
de segurança do telefone, consulte Segurança para o Windows Phone
(http://go.microsoft.com/fwlink/?LinkId=215977) no MSDN.
Armazenamento de credenciais O Windows Phone 7 oferece suporte aos seguintes algoritmos de criptografia:
AES
HMACSHA1
HMACSHA256
Rfc2898DeriveBytes
SHA1
SHA256
É imperativo que o desenvolvedor de qualquer aplicativo móvel que armazene as credenciais no telefone
considere a segurança das credenciais armazenadas em um evento em que o dispositivo esteja perdido ou
comprometido.
Autenticação O Windows Phone 7 não oferece suporte para a autenticação NTLM . As solicitações de serviço da Web do
telefone através do UAG devem criar o cabeçalho correto de autenticação recuperando as credenciais do
usuário a partir do armazenamento de criptografia e anexando as credenciais ao cabeçalho do objeto
HttpWebRequest. As solicitações de Web devem ser feitas através de HTTPS e os cabeçalhos de autenticação
serem ultrapassados, da seguinte maneira.
upsRequest.Headers["Authorization"] = "Basic " +
Convert.ToBase64String(
Encoding.UTF8.GetBytes(AppSettings.Username + ":" + AppSettings.Password)) +
System.Environment.NewLine;
Ao usar uma referência de serviço WCF, o cabeçalho poderá ser adicionado ao cliente SOAP acessando o
OperationContextScope, conforme o seguinte exemplo.
using (OperationContextScope scope =
new OperationContextScope(ups.InnerChannel))
{
//Create the Request Message Property
HttpRequestMessageProperty request = new HttpRequestMessageProperty();
//Create the authentication and mobile agent header
12
request.Headers[System.Net.HttpRequestHeader.Authorization] =
"Basic " +
Convert.ToBase64String(Encoding.UTF8.GetBytes(AppSettings.Username + ":" +
AppSettings.Password)) + System.Environment.NewLine;
request.Headers[System.Net.HttpRequestHeader.UserAgent] =
"Microsoft Office Mobile";
//Add the headers to the request
OperationContext.Current.OutgoingMessageProperties.Add(
HttpRequestMessageProperty.Name, request);
//Call the method
ups.GetUserColleaguesAsync(account);
}
Serviços do SharePoint
Serviços de consumo O aplicativo consumirár vários serviços do SharePoint para alcançar os requisitos para o negócio, conforme
resumido na seguinte tabela.
Requisito URL do serviço Método
Ler e atualizar Lista
de dados
http://sharepoint/_vti_bin/listdata.svc Biblioteca de cliente
OData
Visualizar News feed
do usuário
http://mysitehost/_layouts/activityfeed.aspx?consolidate
d=true
Consumir o RSS Feed
fornecido.
Visualizar os colegas
do usuário
http://mysitehost/_vti_bin/userprofileservice.asmx GetUserColleagues
Visualizar o Perfil do
usuário
http://mysitehost/_vti_bin/userprofileservice.asmx GetUserProfileByName
Acessando os dados da lista do SharePoint usando a Biblioteca de Cliente OData A publicação do conjunto de sites do SharePoint através do UAG server permite a integração entre os aplicativos
do Windows Phone 7 e os APIs REST do SharePoint. A Biblioteca de cliente OData para o Windows Phone 7 série
CTP (http://go.microsoft.com/fwlink/?LinkId=215984) permite que os dispositivos do Windows Phone 7
13
consumam os feeds do OData. Os APIs REST do SharePoint pode ser chamados usando a Biblioteca de Cliente
OData para propiciar as operações criar, ler, atualizar e excluir (CRUD) na lista de dados do SharePoint. Isto
fornece a habilidade para integrar os dispositivos do Windows Phone 7 em colaboração com os aplicativos
desenvolvidos na plataforma do SharePoint. O modelo de código a seguir demonstra como usar a Biblioteca de
Cliente OData e os APIs REST do SharePoint para executar operações CRUD nos dados da lista do SharePoint.
Como você não pode adicionar Referências de serviço para os APIs REST do SharePoint a um aplicativo do
Windows Phone 7, você deve criar uma classe proxy manualmente e adicionar a classe como uma referência
ao projeto no Microsoft Visual Studio®. DataSvcUtil.exe (http://go.microsoft.com/fwlink/?LinkID=215987) é
usado para criar a classe proxy. Neste cenário, a classe proxy é chamada ContosoIntranetDataContext. Esta
classe é usada extensivamente nos modelos de código a seguir.
O método LoadTask demonstra como carregar as tarefas a partir da lista de Tarefas do SharePoint. Neste
método, a classe ContosoIntranetDataContext usa as configurações de IsolatedStorage para determinar em
qual site SharePoint se conectar. O manipulador de evento SendingRequest é atribuído à instância do
ContosoIntranetDataContext. Este manipulador de evento é acionado quando a classe
ContosoIntranetDataContext invoca uma solicitação para os APIs REST do SharePoint. requestUri defines a
operação REST e o método BeginExecute envia a solicitação. O método BeginExecute também registra o
método retorno de chamada assíncrono que será acionado quando a consulta for concluída.
private void LoadTasks()
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
if (allTasks == null)
{
allTasks = new ObservableCollection<Task>();
}
ObservableCollection<TasksItem> tasks = new
ObservableCollection<TasksItem>();
//Retrieve the settings from isolated storage
SettingsModel settings =
(IsolatedStorageSettings.ApplicationSettings["Settings"]
as SettingsModel);
//Set up the ODATA context to point to the SharePoint site
context = new ContosoIntranetDataContext(
new Uri(settings.ServerUri + "/_vti_bin/listdata.svc"));
//Register the event handler used to authenticate to UAG
14
context.SendingRequest += new EventHandler<SendingRequestEventArgs>(
context_SendingRequest);
//Set the URI to query the Tasks list
//Expand is used to retrieve lookup column values
Uri requestUri = new Uri(context.BaseUri.OriginalString +
"/Tasks()?$expand=AssignedTo,CreatedBy,ModifiedBy");
//Start the async call to query SharePoint
context.BeginExecute<TasksItem>(requestUri, QueryCallback, null);
});
}
O manipulador de evento SendingRequest será acionado quando a consulta OData for enviada aos Produtos
do SharePoint 2010. O código neste manipulador do evento é significativo: sem este código, o UAG server
não pode identificar corretamente um dispositivo Windows Phone 7 e interagir adequadamente para
autenticar um usuário. Cabeçalho do Agente do Usuário faz com que o UAG server responda com HTTP 401
em vez de 302. Cabeçalho de autorização inclui as credenciais criptografadas para o usuário acessando o
feed OData. As credenciais criptografadas são usadas pelo UAG server para autenticar o usuário.
private void context_SendingRequest(object sender, SendingRequestEventArgs e)
{
e.RequestHeaders["User-Agent"] = "Microsoft Office Mobile";
e.RequestHeaders["Authorization"] = "Basic " + Convert.ToBase64String(
Encoding.UTF8.GetBytes(App.Credential.Name + ":" +
App.Credential.Password)) + System.Environment.NewLine;
}
Após a conclusão da consulta ao servidor executando o SharePoint Server, o método QueryCallback é
acionado. Este método analisa os resultados retornados de uma consulta e os adiciona ao
ObservableCollection associado aos elementos da IU no aplicativo do telefone.
private void QueryCallback(IAsyncResult asyncResult)
{
IEnumerable<TasksItem> results;
allTaskItems = new ObservableCollection<TasksItem>();
results = context.EndExecute<TasksItem>(asyncResult).ToList()
15
as IEnumerable<TasksItem>;
ObservableCollection<Task> returnedTasks =
new ObservableCollection<Task>();
foreach (TasksItem tasksItem in results)
{
//Code omitted for brevity: Retrieve metadata about the task…
//Create the new Task and set its properties
Task task = new Task()
{
Title = tasksItem.Title,
Priority = taskPriority,
TaskStatus = taskStatus,
Body = tasksItem.Description,
Author = authorUser.Name,
Editor = editorUser.Name,
AssignedTo = assignedToUser.Name,
StartDate = DateTime.Parse(tasksItem.StartDate.ToString()),
Modified = DateTime.Parse(tasksItem.Modified.ToString()),
Created = DateTime.Parse(tasksItem.Created.ToString()),
DueDate = DateTime.Parse(tasksItem.DueDate.ToString()),
UIVersion = 1,
Last_x0020_Modified =
DateTime.Parse(tasksItem.Modified.ToString()),
Created_x0020_Date =
DateTime.Parse(tasksItem.Created.ToString()),
PercentComplete = (int)finalPercentComplete,
ListID = tasksItem.Id
};
//Add each task to the ObservableCollection bound to UI elements.
returnedTasks.Add(task);
allTaskItems.Add(tasksItem);
}
16
allTasks = returnedTasks;
//UI callback methods omitted for brevity
}
O método SaveTask cria novas tarefas e atualiza as existentes. O código a seguir demonstra como usar a
Biblioteca de cliente OData para criar novas tarefas ou atualizar as existentes em uma lista de tarefas do
SharePoint a partir de um dispositivo Windows Phone 7. A classe TasksItem representa uma tarefa em uma lista
de tarefas. Uma instância TasksItem é criada e suas propriedades são definidas para os valores no formulário
usado para criar ou editar tarefas. A instância TasksItem é então comparada às tarefas já carregadas no telefone
para ver se a tarefa já existe. Esta verificação determina se a Biblioteca de cliente OData foi usada para criar uma
nova tarefa na lista de tarefas do SharePoint ou atualizar uma existente. O método BeginSaveChanges invoca a
operação apropriada e registra o método de retorno de chamada saveChangesCallBack.
public void SaveTask(Task task, Action<Task> callback)
{
taskToSave = task;
#region Create/update new task object
saveTaskCallback = callback;
//Retrieve the settings from isolated storage
SettingsModel settings =
(IsolatedStorageSettings.ApplicationSettings["Settings"]
as SettingsModel);
//Set up the ODATA context to point to the appropriate SharePoint site
context = new ContosoIntranetDataContext(
new Uri(settings.ServerUri + "/_vti_bin/listdata.svc"));
//Register the event handler used to authenticate to UAG
context.SendingRequest +=
new EventHandler<SendingRequestEventArgs>(context_SendingRequest);
TasksItem tasksItem = new TasksItem();
tasksItem.Title = task.Title;
tasksItem.Description = task.Body;
tasksItem.AssignedToId = assignedToUserID;
tasksItem.PriorityValue = task.Priority.DisplayString;
tasksItem.StartDate = task.StartDate;
17
tasksItem.DueDate = task.DueDate;
//Set percent complete
if (task.PercentComplete > 0)
{
tasksItem.Complete = (double)task.PercentComplete / 100;
}
else
{
tasksItem.Complete = (double)0;
}
//Set tasks status
tasksItem.StatusValue = task.TaskStatus.DisplayString;
//If the task already exists then update it
if (allTasks.Count > 0 && DoesTaskExist(taskToSave) && task.ListID != 0)
{
tasksItem.Id = task.ListID;
context.AttachTo("Tasks", tasksItem, "*");
context.UpdateObject(tasksItem);
}
//If the task does not exist then create it
else
{
context.AddToTasks(tasksItem);
}
Deployment.Current.Dispatcher.BeginInvoke(
() =>
{
//Start the async call to SharePoint to commit the changes
context.BeginSaveChanges(saveChangesCallBack, context);
}
);
}
18
Após a conclusão da consulta, saveChangesCallBack é acionado. Este método analisa os resultados
retornados de uma consulta e atualiza o ObservableCollection associado aos elementos da IU no telefone.
private void saveChangesCallBack(IAsyncResult asyncResult)
{
Deployment.Current.Dispatcher.BeginInvoke(
() =>
{
//Get the data context from the response
context = asyncResult.AsyncState as ContosoIntranetDataContext;
//Call the endsavechanges method to commit the change
DataServiceResponse response = context.EndSaveChanges(asyncResult);
//If the task already exists then update it
if (allTasks.Count > 0 && DoesTaskExist(taskToSave))
{
for (int i = 0; i < allTasks.Count; i++)
{
if (allTasks[i].ListID == taskToSave.ListID)
{
//Update the corresponding task in the in-memory collection
allTasks[i] = taskToSave;
//Call the callback to tell the UI the save operation is complete
saveTaskCallback.DynamicInvoke(taskToSave);
break;
}
}
}
//If the task does not exist then create it
else
{
//Add the task to the in-memory collection
allTasks.Add(taskToSave);
//Call the callback to tell the UI the save operation is complete
saveTaskCallback.DynamicInvoke(taskToSave);
}
19
}
);
}
O método DeleteTask demonstra como usar a Biblioteca de cliente OData para excluir tarefas em uma lista de
tarefas do SharePoint a partir de um dispositivo Windows Phone 7. Este método pega o ID associado à tarefa
selecionada no aplicativo do Windows Phone 7 e cria um objeto Task baseado no ID. O objeto Task é usado
para localizar o correspondente TasksItem no contexto da Biblioteca de cliente OData associado à lista de
tarefas do SharePoint. Após a localização da entrada correspondente, ela é marcada para exclusão. O método
de retorno de chamada BeginSaveChanges invoca o API REST do SharePoint e e registra o método de retorno
de chamada DeleteCallBack.
public void DeleteTask(int ID, Action callback)
{
deleteTaskCallback = callback;
taskToDelete = GetTask(ID);
//Retrieve the settings from isolated storage
SettingsModel settings =
(IsolatedStorageSettings.ApplicationSettings["Settings"]
as SettingsModel);
//Set up the ODATA context to point to the appropriate SharePoint site
context = new ContosoIntranetDataContext(
new Uri(settings.ServerUri + "/_vti_bin/listdata.svc"));
//Register the event handler used to authenticate to UAG
context.SendingRequest +=
new EventHandler<SendingRequestEventArgs>(context_SendingRequest);
foreach (TasksItem tasksItem in allTaskItems)
{
if (tasksItem.Id == taskToDelete.ListID)
{
context.MergeOption = MergeOption.OverwriteChanges;
context.AttachTo("Tasks", tasksItem, "*");
context.DeleteObject(tasksItem);
//Start the async call to SharePoint to commit the delete
context.BeginSaveChanges(DeleteCallback, context);
20
break;
}
}
}
Após a conclusão da consulta, o método DeleteCallBack é acionado. Este método analisa os resultados
retornados de uma consulta e remove a tarefa no ObservableCollection associado aos elementos da IU no
telefone.
private void DeleteCallback(IAsyncResult asyncResult)
{
Deployment.Current.Dispatcher.BeginInvoke(
() =>
{
//Get the data context from the response
context = asyncResult.AsyncState as ContosoIntranetDataContext;
//Call the endsavechanges method to commit the change
DataServiceResponse response = context.EndSaveChanges(asyncResult);
// Remove the task from the in-memory collection as well
if (taskToDelete != null)
{
//Remove the task from the in-memory collection
GetAllTasks().Remove(taskToDelete);
//Call the callback to tell the UI the delete operation is complete
deleteTaskCallback.DynamicInvoke();
}
}
);
}
Atividade de RSS Feed
O news feed pessoal e as atividades recentes são publicadas no host Meu Site como um RSS feed. O
aplicativo precisa somente solicitar o RSS feed, fazer download da cadeia e adicionar os resultados a um
objeto do conjunto. As atividades são publicadas pelo host do Meu Site na URL
http://<mysitehost>/_layouts/activityfeed.aspx?consolidated=true. (Certifique-se de que testou o RSS feed
21
seguindo as orientações no Apêndice ao final deste paper antes de tentar acessá-lo através da abordagem de
código descrita abaixo.)
O método LoadNewsfeed demonstra como solicitar o feed de atividades consolidada para os usuários
autenticados através do UAG. Uma nova A new HtpWebRequest é criada passando a URI do feed de
atividade consolidada. Os cabeçalho de cliente necessários são adicionados à solicitação. A Conta e Senha são
variáveis acessadas em um armazenamento criptografado isolado. Para facilitar o uso do padrão Modelo de
Exibição da Exibição do modelo, o kit de ferramentas leves MVVM empregado (para obter mais informações,
consulte Site da Web do kit de ferramentas leves MVVM (http://go.microsoft.com/fwlink/?LinkId=216135)).
Neste modelo DispatcherHelper.CheckBeginInvokeOnUI é chamado para manusear ResponseStream e os
resultados são passados para o AddNewsfeedItems para extrair os valores resultantes e adicioná-los ao
conjunto NewsfeedItems.
private void LoadNewsfeed()
{
//My Newsfeed RSS URL
string url =
String.Format(“{0}/my/_layouts/activityfeed.aspx?consolidated=true",
AppSettings.Url);
System.Uri authServiceUri = new Uri(url);
HttpWebRequest client =
WebRequest.CreateHttp(authServiceUri) as HttpWebRequest;
//Add the necessary headers for UAG
client.Headers["User-Agent"] = "Microsoft Office Mobile";
client.Headers["Authorization"] = "Basic " +
Convert.ToBase64String(Encoding.UTF8.GetBytes(AppSettings.Username + ":" +
AppSettings.Password)) +
System.Environment.NewLine;
client.AllowReadStreamBuffering = true;
client.AllowAutoRedirect = true;
// Call and handle the response.
client.BeginGetResponse((asResult) =>
{
DispatcherHelper.CheckBeginInvokeOnUI(
() =>
{
try
22
{
var response = client.EndGetResponse(asResult);
StreamReader reader = new
StreamReader(response.GetResponseStream());
string responseString = reader.ReadToEnd();
AddNewsfeedItems(responseString);
}
catch (WebException failure)
{
throw failure;
}
});
},
null);
}
Após a conclusão do download AddNewsfeedItems adiciona resultados para o conjunto associado a IU.
responseString é analisado em um XDocument e os dois nomes de espaço são adicionados. O LINQ foi usado
para consultar o conjunto de entradas e criar objetos MyNewsfeedViewModel que armazenam os itens de
news feed resultantes e as informações do autor. Finalmente, os itens são adicionados ao conjunto
MyNewsFeedItems.
private void AddNewsfeedItems(string responseString)
{
//Parse the XML Response
XDocument newsfeedDoc = XDocument.Parse(responseString);
//Add the necessary Namespaces
XNamespace ns = "http://www.w3.org/2005/Atom";
XNamespace af = "AF";
//Use LINQ to extract the information into a ViewModel
IEnumerable<MyNewsfeedViewModel> entries = from entry in
newsfeedDoc.Descendants(XName.Get("entry", ns.NamespaceName))
select new MyNewsfeedViewModel()
{
Summary = entry.Element(ns + "summary").Value,
Published = entry.Element(ns + "published").Value,
Author =
23
(from author in entry.Descendants(XName.Get("author",
ns.NamespaceName))
select new PersonViewModel(NavigationService)
{
AccountName = author.Element(af + "AccountName").Value,
Name = author.Element(ns + "name").Value,
PersonalSiteUrl = author.Element(ns + "uri").Value,
Email = author.Element(ns + "email").Value,
PictureUrl = author.Element(af + "Picture").Value
}).FirstOrDefault()};
//Add the resulting items to the Collection bound to the UI controls
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
foreach (MyNewsfeedViewModel e in entries.ToList())
{
MyNewsfeedItems.Add(e);
}
});
}
Serviço de Perfil de Usuário - Colegas O serviço de Perfil de Usuário do SharePoint oferece a habilidade de visualizar, criar, editar e gerenciar as
informações do perfil de usuário nos Produtos do SharePoint 2010. O serviço é o principal ponto de entrada
para o aplicativo recuperar as informações sobre os colegas e o perfil do usuário. O código a seguir
demonstra como chamar o serviço de Perfil de Usuário no Windows Phone7 através do UAG.
Criar referência de serviço de perfil de usuário Comece adicionando um Serviço de referência ao seu projeto no Windows Phone 7. Digite a URL para o
ponto de extremidade do Serviço de perfil de usuário do SharePoint, por exemplo:
http://spwp7intranet.contoso.com/_vti_bin/userprofileservice.asmx
Forneça um nome reconhecível à Referência de serviço, tal como UserProfileService e clique em OK.
Método da Web GetUserColleagues O método LoadColleagueData usa o método GetUserColleaguesAsync do Serviço de perfil de usuário para
retornar um conjunto de colegas como objetos ContactData. Após a criação de BasicHttpBinding e
24
EndpointAddress, um novo UserProfileServiceSoapClient é criado com os parâmetros necessários. As chamadas
de serviço no Silverlight devem ser feitas de modo assíncrono. Um novo manipulador de evento OnCompleted é
adicionado para o evento GetUserColeaguesCompleted. Para adicionar os cabeçalhos solicitados pelo UAG, um
OperationContextScope é usado e um HttpRequestMessageProperty é criado para manter os dois cabeçalhos
necessários para autenticação no UAG. Os cabeçalhos são adicionados à mensagem de saída e a chamada
assíncrona é feita para GetUserColleaguesAsync usando a conta do usuário como parâmetro.
private void LoadColleagueData()
{
string url =
String.Format("{0}/_vti_bin/userprofileservice.asmx", AppSettings.Url);
BasicHttpBinding binding = new BasicHttpBinding();
EndpointAddress endpoint = new EndpointAddress(url);
UserProfileService.UserProfileServiceSoapClient ups =
new UserProfileServiceSoapClient(binding, endpoint);
//Add the Event Completed Handler
ups.GetUserColleaguesCompleted +=
new EventHandler<GetUserColleaguesCompletedEventArgs>(
ups_GetUserColleaguesCompleted);
//Add the credentials
using (OperationContextScope scope =
new OperationContextScope(ups.InnerChannel))
{
//Create the Request Message Property
HttpRequestMessageProperty request = new HttpRequestMessageProperty();
//Create the authentication and mobile agent header
request.Headers[System.Net.HttpRequestHeader.Authorization] =
"Basic " +
Convert.ToBase64String(Encoding.UTF8.GetBytes(AppSettings.Account +
":" + AppSettings.Password)) + System.Environment.NewLine;
request.Headers[System.Net.HttpRequestHeader.UserAgent] =
"Microsoft Office Mobile";
//Add the headers to the request
OperationContext.Current.OutgoingMessageProperties.Add(
25
HttpRequestMessageProperty.Name, request);
//Call the method
ups.GetUserColleaguesAsync(account);
}
}
Quando o método GetUserColleaguesAsync retorna os resultados, o evento ups_GetUserColleaguesCompleted é
chamado. Se não houver erros, LINQ será usado para criar uma lista de PersonViewModels a partir do
ContactData resultante. A última etapa é adicionar PersonViewModels a partir da lista para ColleaguesList no
thread IU chamando CheckBeginInvoke e passando na nossa lista de PersonViewModels.
private void ups_GetUserColleaguesCompleted(object sender,
GetUserColleaguesCompletedEventArgs e)
{
if (e.Error == null)
{
//Create a list of PersonViewModels
IEnumerable<PersonViewModel> colleagues =
from contact in e.Result
select new PersonViewModel()
{
AccountName = contact.AccountName,
UserProfileID = contact.UserProfileID.ToString(),
Name = contact.Name,
Title = contact.Title,
Email = contact.Email,
PersonalSiteUrl = contact.Url
};
//Load the Colleagues list on the UI thread
DispatcherHelper.CheckBeginInvokeOnUI(() =>
{
foreach (PersonViewModel c in colleagues.ToList())
{
Colleagues.Add(c);
}
});
}
26
else
{
Debug.WriteLine("Error loading the Colleagues List: {0}",
e.Error.Message);
}
}
Serviço de perfil de usuário - Dados de perfil de usuário O método Web GetUserColleagues não retorna os perfis de usuários. Este método retorna ContactData que
podem ser passados de volta ao método GetUserProfileByName Serviço de perfil de usuário que retorna um
objeto de Perfil de usuário completo que pode ser usado para exibir um perfil de usuário completo. O método a
seguir é usado para retornar os detalhes do perfil de usuário para nossos colegas. Especificamente,
retornaremos os campos AboutMe, WorkPhone, MobilePhone e PictureURL.
O método GetUserProfileProperties pega um objeto PersonViewModel para a pessoa cujo perfil queremos
recuperar. Neste método, construímos um inspetor de mensagens para resolver um problema que faz com
que os valores de retorno de PropertyData não sejam analisados corretamente. Então criamos um
BasicHttpMessageInspectorBinding que toma o inspetor de mensagem como parâmetro, passa a associação
e o ponto de extremidade para o construtor para o UserProfileServiceSoapClient. e registra o manipulador
de evento GetUserProfileByNameCompleted . Para adicionar as solicitações de cabeçalho solicitadas pelo
UAG, um OperationContextScope adiciona os cabeçalhos Authorization e UserAgent à solicitação.
Finalmente, chamamos o método GetUserProfileByNameAsync e passamos o Account Name para o usuário
e o PersonViewModel que queremos atualizar.
private void GetUserProfileProperties(PersonViewModel person)
{
//URL for the service
string url = String.Format("{0}/_vti_bin/userprofileservice.asmx",
AppSettings.ServerUrl);
//Create the Message Inspector
SPAsmxMessageInspector messageInspector = new SPAsmxMessageInspector();
//Apply the Message Inspector to the Binding
BasicHttpMessageInspectorBinding binding = new
BasicHttpMessageInspectorBinding(messageInspector);
EndpointAddress endpoint = new EndpointAddress(url);
27
UserProfileService.UserProfileServiceSoapClient ups = new
UserProfileServiceSoapClient(binding, endpoint);
//Add the Event Completed Handler
ups.GetUserProfileByNameCompleted += new
EventHandler<GetUserProfileByNameCompletedEventArgs>
(ups_GetUserProfileByNameCompleted);
using (OperationContextScope scope = new
OperationContextScope(ups.InnerChannel))
{
//Create the Request Message Property
HttpRequestMessageProperty request = new HttpRequestMessageProperty();
//Create the authentication and mobile agent header
request.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " +
Convert.ToBase64String(Encoding.UTF8.GetBytes(AppSettings.UserName + ":" +
AppSettings.Password)) + System.Environment.NewLine;
request.Headers[System.Net.HttpRequestHeader.UserAgent] =
"Microsoft Office Mobile";
//Add the headers to the request
OperationContext.Current.
OutgoingMessageProperties.Add(HttpRequestMessageProperty.Name, request);
Debug.WriteLine("Getting User Profile for: {0}", person.AccountName);
//Call the method
ups.GetUserProfileByNameAsync(person.AccountName, person);
}
}
Ao chamar GetUserProfileByNameCompleted, os valores de propriedade de retorno (se houverem) são inspecionados e associados à propriedade adequada em PersonViewModel.
private void ups_GetUserProfileByNameCompleted(object sender,
GetUserProfileByNameCompletedEventArgs e)
{
if (e.Error == null)
28
{
Debug.WriteLine("Got the user profile for {0}",
((PersonViewModel)e.UserState).AccountName);
foreach (UserProfileService.PropertyData propertyData in e.Result)
{
switch (propertyData.Name)
{
case "AboutMe":
((PersonViewModel) e.UserState).AboutMe = propertyData.Values.Count >
0 ? (propertyData.Values[0].Value as string): String.Empty;
break;
case "WorkPhone":
((PersonViewModel)e.UserState).WorkPhone = propertyData.Values.Count >
0 ? (propertyData.Values[0].Value as string): String.Empty;
break;
case "CellPhone":
((PersonViewModel)e.UserState).MobilePhone = propertyData.Values.Count >
0 ? (propertyData.Values[0].Value as string): String.Empty;
break;
case "PictureURL":
((PersonViewModel)e.UserState).PictureUrl = propertyData.Values.Count >
0 ? (propertyData.Values[0].Value as string): String.Empty;
break;
}
}
}
else
{
Debug.WriteLine(e.Error.Message);
}
}
29
Observação: O inspetor de mensagem neste exemplo só é recomendado para uso em ambientes nos quais
você aplicou as atualizações mais recentes do Silverlight. Para obter mais informações, consulte Alternativa
para o acesso a alguns serviços ASMX a partir do Silverlight 4
(http://go.microsoft.com/fwlink/?LinkID=216134 ) e GUIDs de Serviço de perfil de usuário do Silverlight e do
SharePoint User (http://go.microsoft.com/fwlink/?LinkId=216136).
Teste
Testando o aplicativo no emulador O aplicativo neste modelo é estado no emulador de desenvolvimento do Windows Phone 7. O emulador usa
a conexão de rede da máquina host de desenvolvimento. Se necessário, as entradas de arquivo do host
podem ser adicionadas à máquina de desenvolvimento e assim, resolver o endereço do UAG server de
desenvolvimento.
Testando o aplicativo em um dispositivo O teste do aplicativo em um dispositivo físico Windows Phone requer que o telefone esteja conectado a uma
conexão Wi-Fi com disponibilidade pública que fornece o DNS e a rota para o teste de destino no UAG server,
ou testar o UAG server exposto na Internet.
Considerações do Marketplace Depois de desenvolver seu aplicativo para o Windows Phone 7, é importante seguir as etapas apropriadas
para publicar seu aplicativo com segurança no Windows Phone Marketplace. A Microsoft já alocou vários
mecanismos para evitar a pirataria de software nos aplicativos do Windows Phone 7. Você pode ler mais
sobre estas medidas em White-paper anti-pirataria do Windows Phone Marketplace
(http://go.microsoft.com/fwlink/?LinkId=216137).
Em um nível superior, o número mínimo de etapas que você deve seguir para publicar um aplicativo do
Windows Phone 7 no Windows Phone Marketplace inclui a criação de uma conta de desenvolvedor e a
publicação do seu aplicativo no mercado. O artigo Registro de desenvolvedor de Apl Hub passo a passo
(http://go.microsoft.com/fwlink/?LinkId=216138) descreve como registrar uma conta de desenvolvedor.
É importante observar que uma conta de desenvolvedor pode estar vinculada a um indivíduo ou a uma
empresa. Dependendo das suas necessidades, você pode se inscrever com uma conta que seja mais
adequada. A taxa de registro é a mesma para ambos tipos de conta. O artigo Envio de aplicativo do
Windows Phone 7 passo a passo (http://go.microsoft.com/fwlink/?LinkId=216139) descreve como enviar seu
aplicativo para verificação e publicação. Se seu aplicativo estiver de acordo com os Requisitos de certificação
de aplicativo Windows Phone 7[PDF] (http://go.microsoft.com/?linkid=9730558), ele será publicado no
Windows Phone Marketplace.
Na data da publicação deste white paper, não há um “mercado particular” para empresas, para evitar a
distribuição pública de seus aplicativos. Consulte App Hub (http://create.msdn.com) para obter atualizações
e informações sobre a habilidade das organizações em publicar os aplicativos em particular.
30
Embora a Microsoft tenha colocado várias garantias, você deve tomar precauções extras para proteger seu
código no caso de alguém obter uma cópia do arquivo .xap que representa seu aplicativo do Windows Phone 7.
Antes que você vá para as etapas para publicar seu aplicativo no Windows Phone Marketplace, certifique-se de
que ocultou seus aplicativos para proteger sua propriedade individual. Já existem várias ferramentas diferentes
disponíveis para ocultar os aplicativos do Windows Phone 7.
Embora esta lista possa não ser exclusiva, ela deve fornecer um bom ponto de partida para explorar as
opções disponíveis atualmente.
Soluções preemptivas Dotfuscator do Windows Phone (http://www.preemptive.com/windowsphone7.html)
RedGate SmartAssembly 6 EAP (http://www.red-gate.com/MessageBoard/viewforum.php?f=116)
DeepSea Obfuscator (http://www.deepseaobfuscator.com/)
A camuflagem adequada é um processo interativo que leva tempo para testes e verificações. Certifique-se
de garantir um tempo no seu planejamento de processo para ocultar os aplicativos do Windows Phone 7,
testá-los e verificar se o nível de camuflagem é adequado para suas necessidades.
Você pode usar a ferramenta de implantação de aplicativo do Windows Phone 7 (Figura 7) para tentar
ocultar os aplicativos do Windows Phone 7. Esta ferramenta permite que você implemente os aplicativos do
seu Windows Phone 7 camuflado para um dispositivo Windows Phone 7 atual que você tenha registrado
usando sua conta de desenvolvedor para o emulador do Windows Phone 7.
31
Figura 7: Ferramenta de desenvolvimento de aplicativo do Windows Phone 7
Depois de implementar e testar um aplicativo camuflado para o Windows Phone 7, você pode se dar conta
de que níveis muito altos de camuflagem (onde você ativa todo tipo possível de opção para proteger seu
código) não permitem que o aplicativo seja executado de maneira adequada em um dispositivo Windows
Phone 7 ou no emulador do Windows Phone 7. Por outro lado, você pode achar que usar um nível mínimo
de configurações de camuflagem para garantir que seu aplicativo seja executado adequadamente, não
oferece a camuflagem que você necessita.
Você pode adotar as seguintes etapas para determinar qual o nível de camuflagem é aplicado em seu
aplicativo por uma ferramenta de camuflagem. Primeiro, localize o arquivo .xap que representa seu
aplicativo Windows Phone 7 e renomeie a extensão dele para .cab ou .zip. Abra o arquivo e extraia o
conteúdo. Depois, use uma ferramenta como o RedGate .NET Reflector para abrir o assembly que
32
corresponde ao seu aplicativo. Abrir o Nó de recursos permitirá que você veja os arquivos XAML e os salve
em seu disco rígido. (Figura 8)
Figura 8: Salvando os arquivos XAML com o .NET Reflector
Você pode examinar os arquivos XAML para ver qual o nível de camuflagem aplicado ao código. Você se
surpreenderá ao constatar que níveis baixos de camuflagem não alteram o conteúdo de um arquivo XAML e
os níveis altos meramente removem os espaços em branco. Isso definitivamente encoraja o uso do padrão
Modelo de Exibição da Exibição do Modelo para separar a apresentação lógica e o código das camadas de
acesso de dados.
Você também pode examinar o código nos assemblies em que o seu aplicativo do Windows Phone 7 é
baseado. A figura 9 mostra um assembly camuflado.
33
Figura 9: Camuflagem aplicada a um assembly de aplicativo do Windows Phone 7.
Um detalhe importante a ser lembrado sobre camuflagem é que nenhum nível de camuflagem pode evitar
que um hacker muito determinado faça a engenharia reversa da maior parte do seu código fonte. As
técnicas de camuflagem foram criadas para proteger a propriedade intelectual fornecendo uma barreira que
torna difícil o roubo e a engenharia reversa do código.
Conclusão Há muitos recursos disponíveis para o desenvolvedor do Windows Phone 7. O lugar para começar é no App
Hub on MSDN, http://create.msdn.com. Os artigos, blogs e fóruns ajudam os desenvolvedores desde os
cenários de desenvolvimento iniciantes até os mais avançados. Os Produtos do SharePoint 2010 fornecem
uma gama ampla de capacidade para organizações que desejam colaborar e compartilhar conhecimento,
experiência e informações. As aplicações corporativas que aproveitam as capacidades tanto da mobilidade
como do SharePoint fornecerão uma vantagem sem precedentes para as empresas que podem gerenciar,
manter e implementar de maneira inteligente as soluções baseadas na plataforma .NET.
34
Apêndice - Instalação e configuração do UAG para os Produtos do SharePoint 2010 Esta seção descreve como configurar a rede e instalar e configurar um UAG server para publicar um site do
SharePoint para o desenvolvimento do Windows Phone 7. Estas etapas são adequadas para um ambiente de
desenvolvimento. Para obter informações sobre a implementação em um ambiente de produção, consulte
Guia de solução de publicação do UAG (http://go.microsoft.com/fwlink/?LinkID=206256) na TechNet. O UAG
server solicitará no mínimo 4 GB de RAM durante o processo de instalação. Para um ambiente
demonstrativo, 2 GB são suficientes e o aviso pode ser ignorado sem problemas.
1. Criar uma máquina virtual do SharePoint Server e uma máquina virtual do UAG. Neste exemplo, 2010 Information Worker Demonstration and Evaluation Virtual Machine (RTM)
(http://go.microsoft.com/fwlink/?LinkID=189314) é usada uma máquina virtual do SharePoint Server. Para
criar uma máquina virtual do UAG Server, instale o Windows Server 2008 R2 em uma máquina virtual, instale
todas as atualizações usando o Windows Update e siga as etapas abaixo.
Rede O diagrama a seguir ilustra como o servidor executando o SharePoint Server, o UAG server e a máquina de
desenvolvimento do Windows Phone 7estão conectados. A documentação a seguir descreve como
implementar esse cenário.
35
Windows 7 Development Machine Hyper-V Host Machine
UAG Server Virtual Machine
SharePoint Server Virtual Machine
Visual Studio 2010
.5 .180 .171
.180
.1.6
192.168.150.x – Internal Network | 192.168.1.x – External Network
2. Instalar a rede do host da Máquina virtual Hyper-V Na máquina host Hyper-V, crie duas redes virtuais da seguinte maneira. A instalação de duas redes simula um
ambiente de rede de perímetro onde o UAG server conversa com a Internet em um adaptador de rede e com
os recursos internos (neste caso, o servidor executando o SharePoint Server) em outro adaptador de rede.
Nome Tipo de conexão Descrição
Interno Somente interno Conexão entre o UAG server e o servidor
executando o SharePoint Server.
UAG
Externo
Externo - Associado ao adaptador de rede na
máquina host Hyper-V.
A conexão entre a máquina de
desenvolvimento do WP7 e o UAG server.
Observação: Os endereços de IP podem ser um pouco diferentes em seu ambiente. A solução é a rede
interna operar em uma sub-rede diferente da rede externa.
Defina as configurações TCP/IP para o adaptador da rede interna na máquina host da seguinte maneira.
36
Defina as configurações TCP/IP para o adaptador da rede externa na máquina host da seguinte maneira.
3. Instalar a rede da Máquina virtual Hyper-V Na máquina virtual do UAG server, adicione outro adaptador de rede e configure a máquina virtual do UAG
server para usar as redes UAG internas e externas na Hyper V.
37
Na máquina virtual do SharePoint Server, adicione outro adaptador de rede e configure a máquina virtual do
SharePoint Server para usar as redes UAG internas e externas na Hyper V.
Defina as configurações TCP/IP para o adaptador da rede interna na máquina virtual do UAG server da
seguinte maneira.
38
Defina as configurações TCP/IP para o adaptador da rede externa na máquina virtual do UAG server da
seguinte maneira.
Defina as configurações TCP/IP para o adaptador da rede interna na máquina virtual do SharePoint server da
seguinte maneira.
39
Defina as configurações TCP/IP para o adaptador da rede externa na máquina virtual do SharePoint server da
seguinte maneira.
40
4. Preparar a máquina virtual do UAG server para a instalação do UAG Faça login na máquina virtual do UAG server. Renomeie a máquina para UAG1, coloque-a no domínio
contoso.com e reinicialize. Observação: Se não estiver usando o 2010 Information Worker Demonstration
and Evaluation Virtual Machine (RTM) (consulte
http://go.microsoft.com/fwlink/?LinkID=189314&clcid=0x416), ingresse o UAG server no mesmo domínio do
servidor executando o SharePoint Server. Certifique-se de que o 2010 Information Worker Demonstration
and Evaluation Virtual Machine (RTM) esteja em execução.
Use as credenciais a seguir para ingressar a máquina virtual do UAG server no domínio contoso.
Nome de usuário: contoso\administrator
Senha: pass@word1
Reinicialize e faça login usando as credenciais contoso\administrator ou as credenciais específicas do seu
ambiente.
41
5. Instantâneos da máquina virtual do UAG Server Desligue a máquina virtual do UAG server e dê uma olhadela no console de gerenciamento da Hyper-V.
6. Instalar o UAG Server Primeiro, monte a mídia de instalação UAG na máquina virtual do UAG server. Inicie então a máquina virtual
do UAG server e faça login usando as credenciais contoso\administrador. Depois de ter efetuado login,
verifique se você efetuou login usando as credenciais de administrador contoso. Abra um prompt de
comando, digite whoami e aperte ENTER para verificar as credenciais.
Em seguida, inicie a instalação do UAG a partir da mídia de instalação. Consulte Instalando o SP1 para o
Forefront UAG 2010 (http://go.microsoft.com/fwlink/?LinkId=216130) na TechNet para obter informações
adicionais sobre a instalação. (Observação: você não pode instalar o UAG durante uma sessão remota, é
necessário instalá-lo a partir do console.)
42
Clique em Instalar Forefront UAG. Em um cenário de desenvolvimento, você pode executar a máquina
virtual do UAG server com menos de 4 GB de RAM. Se você alocou menos de 4 GB de RAM para a máquina
virtual do UAG, clique em Continuar.
43
Na página do assistente Bem-vindo, clique em Avançar >.
44
Clique em Eu aceito os Termos de Licenciamento para o Software da Microsofte clique em Avançar.
45
Na página Selecione o local de instalação, clique em Avançar.
46
Neste ponto, a instalação começa. O instalador instala as Funções e Recursos dos quais o UAG depende e
configura o servidor para o UAG.
47
Na página Assistente de instalação concluído, clique em Avançar >.
7. Instantâneos da máquina virtual do UAG Server Depois da reinicialização da Máquina virtual do UAG e o término da instalação do UAG, desligue a máquina
virtual do UAG server e dê uma olhada no console de gerenciamento da Hyper-V.
8. Configuração e ativação inicial do UAG Server Inicie a máquina virtual do UAG server e faça login usando as credenciais contoso\administrador. Depois de
ter efetuado login, verifique se você efetuou login usando as credenciais de administrador contoso: Abra um
prompt de comando, digite whoami e aperte ENTER para verificar as credenciais.
48
Para iniciar o assistente de configuração do UAG, clique em iniciar | Todos os programas |Microsoft
Forefront UAG | Forefront UAG Management.
Clique em Configurar definições de rede.
49
Clique em Avançar.
50
Selecione as configurações do adaptador de rede conforme exibido na captura de tela acima e clique em Avençar.
51
Clique em Avançar.
52
Clique em Concluir.
Nesta etapa, você define o UAG com uma configuração de “Servidor único”.
53
Clique em Definir topologia do servidor.
Clique em Avançar.
54
Clique em Servidor único e clique em Avançar.
55
Clique em Concluir.
Clique em Ingressar no Microsoft Update.
56
Clique em Avançar.
57
Clique em Usar o Microsoft Update ao procurar por atualizações (recomendado) e clique em Avançar.
58
Selecione Sim ou Não e clique em Avançar.
59
Clique em Concluir.
60
Clique em Fechar.
Clique em Sim para ativar a configuração.
61
Digite uma senha e clique emAvençar >.
Clique em Ativar.
62
Clique em Concluir.
O Assistente de Ativação foi concluído. Contudo, a configuração do UAG pode não estar totalmente ativada
ainda. Para garantir isso, ative as mensagens informativas na janela Mensagem.
No menu Mensagens, selecione Filtrar mensagens.
Marque a caixa de seleção Mensagens informativas.
Clique em OK.
Aguarde até que a janela Mensagem mostre a mensagem Ativação concluída com êxito.
63
9. Criar o Tronco HTTP para publicar o site do SharePoint Neste cenário, é usado um tronco HTTP para fins de desenvolvimento. Usando um tronco HTTP em vez de
um HTTPS acelera a configuração eliminando as etapas envolvidas com a configuração dos certificados de
segurança para ativar o SSL (Secure Sockets Layer). Em um ambiente de desenvolvimento, também é mais
fácil usar o HTTP porque evita que você tenha que recriar os certificados temporários a cada duas semanas.
Em um ambiente de teste e em um ambiente de produção, um tronco HTTPS é recomendado para garantir as
comunicações entre os dispositivos móveis e o UAG server. Consulte Topologias de publicação do SharePoint
(http://go.microsoft.com/fwlink/?LinkId=216131) na TechNet para aprender sobre as topologias mais
comuns usadas na implantação de servidores executando os Produtos do SharePoint 2010 através do UAG.
Para criar o tronco HTTP, clique com o botão direito do mouse em Conexões HTTP e clique em Novo tronco.
Clique em Avançar.
64
Na etapa 1 do Assistente de Criação de Tronco, clique em Tronco do portal e clique em Avançar.
65
Na etapa 2 do Assistente de criação de tronco, digite ContosoMobile na caixa de texto Nome do tronco. Este
nome não é uma URL navegável, ela representa um nome amigável e identificável para o tronco HTTP.
Na caixa de texto Nome do host público digite portal.contoso.com. Este valor expõe um ponto de
extremidade no tronco HTTP usado pelo UAG para criar um ambiente de portal único que publique todos os
aplicativos em uma única página. Por exemplo, nosso site SharePoint.
Selecione o endereço IP correspondente ao IP da rede externa para a máquina virtual do UAG server.
Clique em Avançar.
66
Na etapa 3 do Assistente de Criação de Tronco, clique em Adicionar para abrir a caixa de diálogo que permite
que você adicione o servidor de autenticação ao tronco.
Clique em Adicionar.
Na lista suspensa Tipo de servidor selecione Active Directory.
Na caixa de texto Nome do servidor digite demo2010a.contoso.com. Este é o FQDN (nome de domínio
totalmente qualificado) para o controlador de domínio em execução na máquina virtual SP2010-7a.
67
Na seção Configurações de conexão, clique em Definir controladores de domínio.
Na seção Configurações de conexão, clique em Definir.
Na caixa de diálogo Controladores de domínio, digite o endereço IP interno para o controlador de domínio.
Na máquina virtual SP2010-7a, este endereço IP é 192.168.150.1.
Clique em OK.
Na seção Configurações de pesquisa, clique no botão … próximo de DN base.
Na caixa de diálogo Raiz de pesquisa, na lista suspensa Selecionar DN base, selecione
CN=Usuários,DC=contoso,DC=com.
Clique em OK.
Marque a caixa de seleção Incluir subpastas.
Defina o Nível de grupos aninhados como igual a 0.
Na seção Acesso ao servidor, na caixa de texto Usuário (domínio\usuário), digite contoso\administrator.
Na caixa de texto senha, digite pass@word1.
68
Clique em OK.
Clique em Sim.
Selecione o servidor demo2010a.contoso.com e clique em Selecionar.
69
Clique em Usuário fornecerá credenciais para cada servidor selecionado. (Em um ambiente de servidor
único como este, você pode selecionar Usuário selecionará em uma lista de servidores.)
Marque a caixa de seleção Usar o mesmo nome de usuário.
Clique em Avançar.
70
Clique em Usar políticas de acesso do Forefront UAG.
Para fins de desenvolvimento, as políticas de acesso padrão do Forefront UAG serão suficientes. Em um
ambiente de produção, você pode adequar estas políticas para uma configuração mais específica par ao seu
ambiente.
Clique em Avançar.
71
Para fins de desenvolvimento, as políticas de acesso padrão do ponto de extremidade do Forefront serão
suficientes. Em um ambiente de produção, você pode adequar estas políticas para uma configuração mais
específica par ao seu ambiente.
Clique em Avançar.
72
A página final no Assistente de Criação de Tronco mostra um resumo da configuração do tronco.
Clique em Concluir para ativar a configuração.
73
10. Criar um aplicativo SharePoint Na seção Aplicativos do console de gerenciamento do UAG, clique em Adicionar.
No Assistente para Adicionar Aplicativos clique em Avançar.
Na etapa 2 do Assistente para Adicionar Aplicativos clique em Web.
Na lista suspensa Web, selecione Microsoft SharePoint Server 2010.
74
Clique em Avançar >.
Na caixa de texto Nome do aplicativo digiteIntranet Contoso.
Este é um nome amigável para o aplicativo que você está publicando com o UAG server. Este nome
aparecerá na home page do Portal UAG.
75
Clique em Avançar.
76
Clique em Avançar.
Para fins de desenvolvimento, as políticas de acesso padrão do ponto de extremidade do Forefront serão
suficientes. Em um ambiente de produção, você pode adequar estas políticas para uma configuração mais
específica par ao seu ambiente.
Clique em Configurar um servidor de aplicativo.
77
Clique em Avançar.
Deixe Tipo de endereço como IP/Host.
Na lista de Endereços, digite o nome do host ou endereço IP interno do servidor executando o SharePoint
Server 2010 192.168.150.1. Dependendo do seu ambiente, você pode também escolher usar o FQDN para o
servidor executando o SharePoint Server ou o endereço IP para carregar o equilíbrio do hardware.
Na lista Caminhos, deixe a entrada padrão “/”. Isso indica que o aplicativo publicado do SharePoint será
publicado na raiz.
Clique em Porta http e digite 80 na caixa.
Conforme mencionado anteriormente, o uso de uma porta HTTP em vez de uma HTTPS simplifica o
desenvolvimento da instalação e da configuração. Em um ambiente de produção, uma porta HTTPS deve ser
usada para criptografar as credenciais passadas entre as máquinas cliente e o UAG server.
Na caixa de texto Nome do host público digite spwp7intranet. Este é uma URL de mapeamento de acesso
alternativo no servidor executando o SharePoint que corresponde ao conjunto de sites que você está
publicando.
78
Este valor é a URL que o UAG server usará para publicar o aplicativo nas máquinas cliente. Ao acessar o
conjunto de sites intranet.contoso.com através dos clientes do UAG server, use a URL
http://spwp7intranet.contoso.com. O UAG direciona a solicitação ao SharePoint como
http://spwp7intranet.contoso.com após a autenticação do usuário. O mapeamento de acesso alternativo do
SharePoint (a ser configurado em etapas posteriores) mapeará a solicitação para
http://intranet.contoso.com.
Clique em Avançar.
Marque a caixa de seleção Usar SSO.
Clique em Adicionar.
Na caixa de diálogo Servidor de autenticação e autorização, selecione demo2010a.contoso.com.
79
Clique em Selecionar.
Na seção Selecionar o método de autenticação do cliente clique em Ambos.
Marque a caixa de seleção Permitir que os clientes avançados ignorem a autenticação tronco.
Marque a caixa de seleção Usar formulários do Office baseados na autenticação para aplicativos Office cliente .
80
Clique em Avançar.
Clique em Sim.
Na caixa de diálogo Link do Portal marque a caixa de seleção Abrir em uma nova janela. O link do portal é
opcional porque o aplicativo do Windows Phone 7 acessa diretamente os APIs do SharePoint APIs, mas o link
é uma excelente ferramenta de solução de problemas.
81
Clique em Avançar.
Marque a caixa de seleção Autorizar todos os usuários.
Em um ambiente de desenvolvimento, conceder a todos os usuários o acesso ao conjunto de sites publicados do
SharePoint fornece uma flexibilidade máxima para fins de testes. Em um ambiente de produção, conceda acesso
somente aos usuários e grupos específicos que têm permissão para acessar o conjunto de sites do SharePoint.
82
Clique em Avançar.
83
Clique em Concluir.
11. Configurar um aplicativo SharePoint No console de gerenciamento do Forefront UAG, na seção Aplicativos, selecione Contoso Intranet e clique
em Editar.
84
Na guia Link do Portal, marque as seguintes caixas de seleção: Portal do computador, Portal móvel premium
e Portal móvel não-premium.
85
Clique em OK.
12. Ativar a configuração No console de gerenciamento do Forefront UAG, na barra de ferramentas, clique no botão Ativar.
A caixa de diálogo Ativar configuração será exibida.
86
Clique em Ativar.
A nova configuração está ativada no UAG server.
Clique em Concluir.
Aguarde até que a janela Mensagem na parte inferior do console de gerenciamento do Microsoft Forefront
UAG exibir a mensagem Ativação concluída com êxito. Embora a caixa de diálogo Ativar configuração
indique que ela foi ativada com êxito, o processo não está completo até que você veja a mensagem na janela
Mensagem.
87
13. Configurar e verificar os Mapeamentos de acesso alternativo do SharePoint O SharePoint deve ser configurado para responder a solicitações para http://spwp7intranet.contoso.com e
mapear as solicitações para http://intranet.contoso.com.
1. Em Administração central do SharePoint 2010. navegue até a seção Gerenciamento de aplicativo e selecione
Gerenciamento de aplicativo Web.
2. Selecione Intranete escolha Estender (Estender aplicativo Web) na faixa de opções.
3. Na caixa de diálogo Estender aplicativo Web para outro site IIS digite as configurações a seguir:
Nome: SharePoint - spwp7intranet.contoso.com – 80
Porta: 80
Cabeçalho do host: spwp7intranet.contoso.com
Zona: Intranet
4. Clique em OK.
5. Confirme as configurações navegando para Gerenciamento de aplicativo | Aplicativos Web | Configurar
mapeamento de acesso alternativo.
6. Escolha Grupo de mapeamento de acesso alternativo para a Intranet e você deverá ver a nova entrada para
http://spwp7intranet.com
14. Adicionar entradas de arquivo hosts ao ambiente de desenvolvimento Neste cenário, as entradas de arquivo hosts são usadas para resolver o UAG e o server executando o
SharePoint. As entradas DNS poderiam também ser usadas, mas os arquivos de hosts possuem uma
alternativa aceitável em um ambiente de desenvolvimento. Em um ambiente de produção, as entradas DNS
devem ser usadas para a resolução de nomes.
Na máquina onde o emulador do Windows Phone 7 está em execução, adicione uma entrada para o arquivo
de hosts para apontar para nome do host público e o endereço IP associado ao aplicativo do portal intranet
Contoso no UAG server. O arquivo de hosts está situado em c:\windows\system32\drivers\etc.
192.168.1.171 spwp7intranet.contoso.com
Opcionalmente, você pode adicionar uma entrada na Home page do portal UAG.
192.168.1.171 portal.contoso.com
88
15. Testar a configuração Na máquina onde o emulador do Windows Phone 7 estiver em execução, feche todos os navegadores da
Web para certificar-se de que a entrada do arquivo de hosts seja reconhecida. Abra então o Internet Explorer
e navegue para http://spwp7intranet.contoso.com.
O Aplicativo do UAG Server e o Portal de acesso à rede serão exibidos.
Baixar e instalar o controle ActiveX.
89
Clique em Instalar.
Clique em Sim.
Marque a caixa de seleção Confiar neste site e clique em Confiar.
Digite as credenciais para um usuário que tem acesso ao site publicado do SharePoint site e clique emLogin.
90
O site do SharePoint será exibido no navegador da Web. Neste ponto, o site publicado do SharePoint através
do UAG pode agora ser acessado através de um dispositivo móvel, como o Windows Phone 7.
91
Opcionalmente, você pode testar o acesso à página do portal UAG digitando a URL http://portal.contoso.com
em um navegador.
92
O UAG também apresenta um Portal móvel premium para os clientes como o Windows Phone. A partir do
navegador do emulador, digite uma URL para o portal, http://portal.contoso.com e você será redirecionado
para a página de login:
Digite a credencial Contoso (por exemplo Contoso\tonip e pass@word1) e você será redirecionado para o
Portal móvel.
93
Selecione o link Contoso Intranet e você deverá ver a home page do SharePoint.
16. Testar o News feed RSS Quando os Produtos do SharePoint 2010 são publicados através do UAG, algumas páginas padrão não são
analisadas corretamente. A página Activityfeed.aspx é de principal importância para este documento pois
renderiza o news feed consolidado. Teste as configurações seguindo as orientações abaixo.
94
Activityfeed.aspx Vá para a página Meu News Feed e marque para ver o RSS feed.
O seguinte erro é exibido.
Resolução A regra padrão para ocultar o log está sendo aplicada na página ActivityFeed.aspx. Para mudar esta regra
para evitar o aplicativo da regra, siga as etapas a seguir:
Abra o arquivo de configuração AppWrap apropriado em um editor de texto. Os arquivos podem ser
encontrados no diretório %ProgramFiles%\Microsoft Forefront Unified Access
Gateway\von\Conf\WizardDefaults\AppWrapTemplates.
Faça back up e edite o arquivo AppWrap adequadamente para o protocolo do seu portal:
HTTP_WhlFiltAppWrap_ForPortal for HTTP e HTTPS_WhlFiltAppWrap_ForPortal for HTTPS.
95
Localize a linha:
<!-- for sharepoint 2010 conditional appwrap hide log off -->
<URL case_sensitive="false">.*\.aspx.*</URL>
Mude-a para:
<!-- for sharepoint 2010 conditional appwrap hide log off changed to
exclude ActivityFeed.aspx -->
<URL case_sensitive="false">^.*(?<!(^|\\|/)(activityfeed))\.aspx.*</URL>
Salve o arquivo e ative a nova configuração.
Retorne para a página Meu News Feed e clique no botão RSS. A página deve renderizar corretamente e a URL
deve ser reescrita corretamente.
96
Recursos
Forefront UAG na TechNet http://go.microsoft.com/fwlink/?LinkId=216132&clcid=0x416
Blog 'Closer to the Edge' Autor = Jason Jones
Impacto das alterações de avaliação de ponto de extremidade para o Forefront UAG SP1 em dispositivos
móveis como iPads/iPhones (http://go.microsoft.com/fwlink/?LinkId=216133)
Blog da equipe 'Silverlight Web Services' Alternativa para o acesso a alguns serviços ASMX a partir do Silverlight 4
(http://go.microsoft.com/fwlink/?LinkId=216134)
Sobre os autores
Todd Baginski, MVP Todd é um consultor independente e profissional cinco vezes mais valioso para o Microsoft
SharePoint, que usa as tecnologias do SharePoint, do Silverlight, do Office, do Windows Phone 7
e da .NET para criar sites e soluções personalizadas para fornecer informações aos
trabalhadores. Todd é o autor do conteúdo e apresentador da parte de BCS(Serviços
Corporativos de Conectividade) do programa MCM (Mestres certificados Microsoft) em
SharePoint e um apresentador regular na TechEd, SharePoint Connections e conferências da
Microsoft SharePoint. Todd contribui com colunas regulares para a revista SharePointPro
Connections e também recentemente foi editor técnico para o livro de Scot Hillier e Brad
Stevenson, Professional Business Connectivity Services in SharePoint 2010. Ele também criou os
materiais de treinamento do Microsoft BPOS (Microsoft Business Productivity Online Suite) para
o SharePoint Online (SPO) 2010 enquanto o BPOS 2010 estava ainda nos estágios alfa e beta e
entregou os materiais de treinamento BPOS/SPO após a conferência TechReady 11 somente
para os funcionários da Microsoft.
Todd é uma pessoa muito ativa que gosta de passar o seu tempo livre com a família e
esquiando sempre que tem oportunidade. Ele pode ser encontrado através do email
Matthew McDermott, MVP Matthew McDermott, Microsoft SharePoint Server MVP, é um membro fundador da Aptillon, Inc.
e Consultor principal da AbleBlue em Austin, Texas. A AbleBlue é especialista em integração do
SharePoint, estratégia e consultoria em implementação. Matthew é um autor e especialista em
tecnologias SharePoint focadas no gerenciamento de conteúdo Web, colaboração, computação
de pesquisa e social, Matthew vem liderando a implementações do SharePoint para empresas da
Fortune 500 desde 2002. Seu blog (www.ableblue.com/blog) apresenta tópicos de interesse
para desenvolvedores, profissionais de TI e usuários finais em geral. Matthew pode ser
contatado pelo email [email protected].
97
Ele passa seu tempo livre como adestrador de cães para K9 Search • Austin, uma equipe K9
voluntária de busca que serve ao FBI e aos Departamentos de polícia de Austin e San Antonio.
Um excelente cozinheiro e bartender, em suas horas vagas, Matt passa o máximo de tempo com
sua esposa o quanto os cães lhe permitem.
Ben Ari Ben Ari é um engenheiro de segurança sênior com Microsoft especialista em UAG e fornece
suporte para o produto para os clientes Premier da Microsoft e clientes profissionais mundiais.
Ele também é um jornalista ativo e autor de um blog, tendo publicado recentemente o Microsoft
Forefront UAG 2010 Administrator's Handbook (ISBN 978-1849681629). Você encontrará o blog
dele em http://blogs.technet.com/b/ben.