Thursday, November 12, 2009

Ghosted e UnGhosted em Sharepoint

Autor:André Lage
Publicação:__________
Download:Documento
(EN)TranslateLink


Ghosted e UnGhosted em Sharepoint


Esta é uma daquelas questões que um antigo colega de trabalho me abordou sobre a diferença entre estes 2 conceitos "Ghosted e UnGhosted".

OverView


Com o Sharepoint as pagina de .aspx podem ser renderizadas de 2 formas possíveis, quando um pedido e recebido para uma páginas de aspx, o filtro de Sharepoint isapi determina quem ira tratar a renderização da paginas, ou o ASP.Net ou o "Parser SafeMode do Sharepoint", este metodo apenas existe com o Sharepoint Services.

 





Por defeito as páginas que se encontram na pasta 12"Hive" são compiladas via ASP.NET, 



Todas as páginas de site de Conteudo Sharepoint estão alojadas em Base de dados. Ou seja para cada documento, vamos encontrar um linha na tabela de documentos existente no documento. O ficheiro actual é guardada numa linha da Tabela de Base de dados. Isto é verdade para todos os ficheiros. Mas existe uma excepção, algumas páginas não são guardadas em Base de dados, em vez disso são guardadas em File System, mais concretamente na pasta 12"Hive" da Instalação do SharePoint, ai estão as nossas paginas Ghosted


Se a Coluna SetupPath da BD de Conteúdos de Sharepoint sobre a página de ASPX estiver como null entao é um ficheiro Ghosted  e vai ser compilada em File System 12"Hive" com parse de ASP.NET, se o Campo da BD "SetupPath" estiver preenchida entao a página esta Unghosted e vai utilizar o SafeMode parse do Sharepoint Services, com as regras definidas.
Podemos visualizar a diferença das paginas de Sharepoint e File System atraves dos url com extençao "/_Layouts/*" e "/_vti_bin/*" para WebServices. 

Quando adicionamos um pedaço de código ASP.NET, em uma página de .ASPX que esteja Unghosted, ou seja dentro do Site de Sharepoint o Filtro ISAPI activa o " Parser SafeMode do Sharepoint" para Sharepoint Services retornando a mensagem de erro.

Exemplo:
Adicionar a Tag de Código ASP.NET numa página no Site de Sharepoint Unghosted:
"<%= ctrl.ClientID %>" 
OutPut: Error: Parser Error Message : Code blocks are not allowed in this file

Por resolver este problema, temos que adicionar na Web.Config a Tag "PageParserPaths" com o caminho da Pagina para considerar a pagina segura para compilar código.
<PageParserPaths>
        <PageParserPath VirtualPath="/*" CompilationMode="Always" AllowServerSideScript="true" IncludeSubFolders="true" />
</PageParserPaths> 

Qual é a diferença em utilizar o SafeMode parse e o ASP.NET?


Compilação do Código.

ASP.NET vai realizar o parse da página na primeira renderização e compilar em uma Assembly.

O Metodo "SafeMode Parse" NÃO ira compilar as Páginas está desenhada para criar uma estrutura de Objectos da página. Se encontrar um linha de código "Server Side" na página "ASPX ou ASCX" o metodo SafeMode parser nao deixa a página renderizar. Adicionalmente, os objectos marcados como "runat=server" que podem ser instanciado são os objectos que podem utilizar na Lista de SafeControls que podemos utilizar no desenvolvimento das nossas páginas. 



Porque existe 2 tipos de metodos de renderização?

Segurança e Estabilidade.



O Metodo SafeMode parse  para paginas unghosted serve para proteger de codigo malicioso e injecção de código em paginas com a função de sobrecarregar o servidor e desligar os serviços associados ao Site de Sharepoint.
Se não tivéssemos o Safe Mode Parser todas as páginas teriam de ser compiladas em ASP.NET ou seja teriam que ficar alojadas em Memoria, agora imaginem milhares de páginas, a quantidade de memoria necessária seria enorme.Com a utilização do Virtual Server para WSS, está desenhado para realizar a gestão de um pequena quantidade de paginas compiladas em vez de compilar todas as páginas existentes no Sharepoint o que faz um boa gestão da Memoria, optimo :).



Quais as razões para passar uma página Ghosted para UnGhosted?

As paginas Ghosted passam para Unghosted quando são alteradas no Sharepoint, normalmente são alteradas através de software de apoio ao Desenvolvimento como o SharePoint Designer 2007, ou quando estamos a realizar a carregamento de uma página numa Document Library, o seu conteúdo ira ser registado na BD do Sharepoint, passando automaticamente para UnGhosted.



O que fazer quando as paginas estão Unghosted?


Gary Lapoint desenvolveu um conjunto de linhas de comando para repor as paginas de Sharepoint que foram editadas pelo Sharepoint Designer 2007 ou carregadas no sharepoint.






Disponibiliza um conjunto de Linha de comando para Listagem das paginas que estão Unghosted.

Exemplo:
stsadm –o gl-enumunghostedfiles -url "http://intranet/" -recursesubwebs


Para alterar o estado Unghosted para páginas Ghosted será necessário correr a Linha de comandos.

Exemplo:

stsadm –o gl-reghostfile -url "http://intranet/sitedirectory/lists/sites/summary.aspx" –scope file -force



Para esta linha de comando existe podemos usar as propriedades para diferente tipo de Scopes:

-Scope "Webapplication | Site | Web | List | Page"



Este Artigo e um pouco extenso mas importante para quando realizamos actualizações das páginas e acima de tudo diferenciar o que é ASP.NET e o que é Código de SharePoint.

Mais um artigo e um grande abraço para quem ler este artigo.



Post a Comment