Archive

Posts Tagged ‘SharePoint 2013’

Alto consumo CPU e memória noderunner.exe – SharePoint 2013

February 1, 2018 Leave a comment

CENÁRIO:

Olá!

Apesar de ter montando uma máquina virtual de desenvolvimento com um hardware razoável (gastar menos $$) sofri com consumo excessivo de CPU e memória em um servidor com SharePoint 2013, SQL Server 2008 R2 e Visual Studio 2017 instalado.

ERRO:

Não é um erro, mas é um comportamento pesado para um ambiente de desenvolvimento.

Picture1

SOLUÇÃO:

Analisando um pouco o comportamento do servidor para descobrir o “vilão” da jogada… notei que o processo “noderunner.exe” estava consumindo muita memória e CPU considerável.

Picture2

Noderunner.exe é um componente do serviço de busca do SharePoint 2013.

Para ambientes de Dev, podemos reduzir o consumo desse serviço. Principalmente se não estamos usando a busca do SharePoint 2013 no desenvolvimento. Inclusive, desabilitar o serviço.

No caso, eu precisava de um “pouco” de busca… :/

Então, utilizei os passos a seguir para reduzir o impacto da busca no consumo de recursos do servidor.

  1. Rode o cmdlet Powershell abaixo para reduzir o consumo de CPU

Set-SPEnterpriseSearchService -PerformanceLevel Reduced

  1. Altere o parâmetro “memoryLimitMegabytes” do arquivo “exe.config”. Por padrão, a configuração é “0” – ilimitado.

C:\Program Files\Microsoft Office Servers\15.0\Search\Runtime\1.0\noderunner.exe.config

Picture3

  1. Reinicie o serviço de busca do SharePoint com o cmdlet a seguir

Restart-Service SPSearchHostController

Picture4

Agora o servidor ganhou “algum” fôlego.

Informações adicionais: https://docs.microsoft.com/en-us/powershell/module/sharepoint-server/Set-SPEnterpriseSearchService?view=sharepoint-ps

Reduced: Total number of threads = number of processors, Max Threads/host = number of processors

Partly Reduced: Total number of threads = 4 times the number of processors , Max Threads/host = 16 time the number of processors

Maximum: Total number of threads = number of processors

Abraço!

 

Setup is unable to proceed to the following error(s)

November 24, 2017 Leave a comment

CENÁRIO:

Hoje precisei instalar um VM SharePoint 2013 para fazer um robô de migração/exportação de dados para uma outra aplicação.

Ao instalar o SharePoint 2013 SP1 no Windows Server 2012 R2, logo de cara, me deparo com erro ao instalar os pré-requisitos solicitando .NET 4.5… que já estava instalado no servidor.

ERRO:

Setup is unable to proceed to the following error(s):

This Product requires Microsoft .Net Framework 4.5

framework

SOLUÇÃO:

Depois de algumas pesquisas vi que a MS já lançou um KB para contornar esse problema, onde você irá baixar uma nova DLL e substituir nos arquivos de instalação.

https://support.microsoft.com/en-us/help/3087184/sharepoint-2013-or-project-server-2013-setup-error-if-the–net-framewo

Links para download da nova DLL do instalador:

Abraço!

Devo aplicar Cumulative Updates (CU) assim que são disponibilizados?

February 16, 2016 2 comments

CENÁRIO:

Essa é uma questão que sempre vem à tona e eu sempre perco o link com informações à respeito. Devo manter meu ambiente sempre o mais atualizado possível?

Para quem não está familiarizado, a Microsoft disponibiliza constantemente updates para seus produtos (que ainda estão no ciclo de suporte – normalmente 10 anos desde seu lançamento).

Nesses updates temos hotfixes, Cumulative Updates (pacote com vários hotfixes) e Service Packs (pacote maior ainda de vários hotfixes). A frequência de lançamento também segue essa hierarquia. Ou seja, são lançados vários hotfixes até que formem um Cumulative Update, e assim por diante.

ANÁLISE:

A Microsoft recomenda o seguinte:

https://msdn.microsoft.com/en-us/library/hh479746(v=sql.120).aspx – Installing Updates for SQL Server 2014 after it has already been installed

On an installed instance of SQL Server 2014, we recommend that you apply the latest security updates and critical updates including General Distribution Releases (GDRs), and Service Packs (SPs). Individual Cumulative updates and security updates should be adopted on a case-by-case, "as-needed" basis. Evaluate the update, if it’s needed, then apply it. If not, assess the risk of applying or not.

CONCLUSÃO:

O link mostra informação sobre o SQL Server, mas o mesmo se aplicar ao SharePoint Server e imagino que aos demais produtos Microsoft.

Cumulative Updates devem ser aplicados se necessário. Sua aplicação não deve seguir uma agenda “urgente” de implantação assim que são lançados.

Obviamente que quanto mais atualizado, melhor. Mas no mundo real a aplicação de patch’s não é tão simples em ambiente produtivo.

Como é um assunto que sempre gera bons diálogos. Qual a sua consideração sobre o assunto?

Eu procuro sempre estar no último Service Pack e aplico CU’s à medida da necessidade.

Abraço!

The security validation for this page is invalid and might be corrupted. Please use your web browser’s Back button to try your operation again

October 19, 2015 3 comments

Cenário:

Estou simulando um “stress test” no meu ambiente de desenvolvimento para simular o impacto (hardware) de algumas operações do SharePoint 2013.

No meu teste, além de navegar e buscar alguns itens no site, também quero que o “robô” crie itens nas listas do SharePoint através de requests HTTP.

Ao tentar criar itens usando uma chamada HTTP com as APIs do SharePoint temos o erro mencionado a seguir.

ERRO:

The security validation for this page is invalid and might be corrupted. Please use your web browser’s Back button to try your operation again

Ou, PT-BR:

A validação de segurança para esta página não é valida e pode estar corrompida. Use o botão Voltar do navegador Web para tentar realizar a operação novamente.

SOLUÇÃO:

Como não estou usando OAuth para autorizar a requisição, precisamos passar um “digest value” válido no Header da requisição.

Conseguimos pegar esse valor em um campo (__REQUESTDIGEST) escondido da MasterPage padrão do SharePoint:

 

<input type="hidden" name="__REQUESTDIGEST" id="__REQUESTDIGEST" value="0xC756DFF038FC6A0D241D7203952F8545BC495084B8DCD4EB0171E88F15DD633F8590
ADE4C8749EDCDA73A9C48C8C8C8B515929E86CBBA83341187B3791F20F71,19 Oct 2015 18:14:37 -0000
" />

 

Ou fazendo uma chamada POST com o “body” vazio para http://<site url>/_api/contextinfo antes da chamada que irá criar o item. O retorno dessa chamada conseguimos pegar o “digest value”.

No “Header” dessa chamada com “body” vazio, passe o parâmetro “Accept” com valor “application/json;odata=verbose”.

Exemplo da chamada ao contextinfo:

image

Resposta do contextinfo:

image

{"d":{"GetContextWebInformation":{"__metadata":{"type":"SP.ContextWebInformation"},"FormDigestTimeoutSeconds":1800,"FormDigestValue":
"0xC756DFF038FC6A0D241D7203952F8545BC495084B8DCD4EB0171E88F15DD633F8
590ADE4C8749EDCDA73A9C48C8C8C8B515929E86CBBA83341187B3791F20F71,19 Oct 2015 18:14:37 -0000
"
,"LibraryVersion":"15.0.4569.1000","SiteFullUrl":http://vmsp2013,
"SupportedSchemaVersions":{"__metadata":{"type":"Collection(Edm.String)"},"results":["14.0.0.0","15.0.0.0"]},"WebFullUrl":"http://vmsp2013&quot;}}}

O valor em realce é o valor do parâmetro “X-RequestDigest” que precisamos passar no “Header” da requisição que irá criar itens na lista do SharePoint.

Exemplo da requisição que cria itens em uma lista do SharePont 2013:

POST http://vmsp2013/_vti_bin/client.svc/ProcessQuery

POST data:

<Request xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009&quot; SchemaVersion="15.0.0.0" LibraryVersion="15.0.0.0" ApplicationName="Javascript Library"><Actions>TitleTestefalseIdade22falseContentTypeItemfalseContentTypeId0x01000DC117894911AA4BB7ADE719F7B6C168false</Parameter><Parameter Type="Boolean">false</Parameter><Parameter Type="Null" /></Parameters></Method></ExceptionHandlingScopeSimple></Actions>
<ObjectPaths><StaticProperty Id="0" TypeId="{3747adcd-a3c3-41b9-bfab-4a64dd2f1e0a}" Name="Current" /><Property Id="2" ParentId="0" Name="Web" /><Property Id="4" ParentId="2" Name="Lists" /><Method Id="6" ParentId="4" Name="GetById"><Parameters><Parameter Type="String">84dbf580-a818-4904-a726-25fedc09e490</Parameter></Parameters></Method><Method Id="8" ParentId="6" Name="AddItem"><Parameters><Parameter TypeId="{54cdbee5-0897-44ac-829f-411557fa11be}"><Property Name="FolderUrl" Type="String">/Lists/TesteJMeter</Property><Property Name="LeafName" Type="Null" /><Property Name="UnderlyingObjectType" Type="Number">0</Property></Parameter></Parameters></Method></ObjectPaths>
</Request>

[no cookies]

Request Headers:

Cache-Control: no-cache

X-Requested-With: XMLHttpRequest

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

User-Agent: Mozilla/5.0 (Windows NT 6.3; rv:38.0) Gecko/20100101 Firefox/38.0

Referer: http://vmsp2013/Lists/TesteJMeter/NewForm.aspx?Source=http%3A%2F%2Fvmsp2013%2FLists%2FTesteJMeter%2FAllItems%2Easpx&RootFolder=

X-RequestDigest: 0xC756DFF038FC6A0D241D7203952F8545BC495084B8DCD4EB0171E88F15DD633F8590ADE4
C8749EDCDA73A9C48C8C8C8B515929E86CBBA83341187B3791F20F71,19 Oct 2015 18:14:37 -0000

Connection: keep-alive

Accept-Encoding: gzip, deflate

Pragma: no-cache

Accept-Language: en-US,en;q=0.5

Content-Length: 2508

Content-Type: text/xml; charset=UTF-8

 

Referência: https://msdn.microsoft.com/en-us/library/jj164022(office.15).aspx.

Abraço!

SharePoint 2013 Configuration Wizard Missing Components Language Pack Installation

September 8, 2014 Leave a comment

Olá! J

Cenário:

 

Após aplicar o SP1 no SharePoint 2013 e também SP1 dos Language Pack instalados precisamos rodar o Configuration Wizard (PSCONFIG) para que o SharePoint consolide as atualizações realizadas. Mas, como nem tudo é como nós queremos nessa vida, tive alguns problemas para conseguir fazer com que o Configuration Wizard rodasse sem problemas.

 

ERRO:

 

Ao tentar rodar o Configuration Wizard era apresentado uma mensagem de erro informando que estavam faltando arquivos no SharePoint, embora eu já tivesse aplicado todos os pacotes de Language Pack e seus respectivos Service Pack.

 

“Some farm products and patches were not detected… Missing on <ServerName>”


SOLUÇÃO:

 

Procurando por problema similares na web, encontrei que isso poderia ocorrer por razão do serviço de timer parado, mas no meu caso estava rodando. De toda forma, reiniciei o serviço e tentei rodar novamente o Configuration Wizard. Sem sucesso.

 

O que resolveu foi rodar o seguinte cmdlet no powershell do SharePoint (SharePoint 2013 Management Shell) no servidor que ele apontava com “missing” (faltando) componente:

 

Get-SPProduct

 

Pronto! Ao término da execução deste cmdlet, tente rodar novamente o Configuration Wizard. Agora o SharePoint sabe que os componentes estão instalados e não deve reclamar mais a falta destes.

 

Abraço!

Search has encountered a problem that prevents results from being returned. If the issue persists, please contact your administrator

September 8, 2014 Leave a comment

Olá! J

Cenário:

 

Após aplicar o SP1 no SharePoint 2013 e começar a validar os sites e serviços existentes da FARM encontrei um problema ao validar o funcionamento da busca/pesquisa dos sites que usam o serviço de busca do SharePoint.

 

ERRO:

Ao tentar utilizar a busca do site era apresentado o seguinte erro:

 

“Search has encountered a problem that prevents results from being returned. If the issue persists, please contact your administrator”

 

E ao pesquisar nos eventos gerados nos logs do SharePoint (ULS), encontrei o seguinte:

 

“SearchServiceApplicationProxy::Execute–Error occured: System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: Tried IMS endpoints for operation Execute: Operation sent to IMS failed:

 

Resource saturation, try again later. (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is: Microsoft.SharePoint.SPException:

Tried IMS endpoints for operation Execute: Operation sent to IMS failed: Resource saturation, try again later.”

 

SOLUÇÃO:

 

O erro do ULS cita, talvez, um problema de “recursos disponíveis”… quando fala de “resource saturation”, mas ao checar a condição do servidor vi que só estava consumindo 10% de memória de RAM e o CPU estava uma utilização bem baixa. Então não pode ser falta de recurso.

 

Ao pesquisar um pouco mais, percebi que um dos serviços do SharePoint estava “congelado” no estado “Starting”… Ou seja, não conseguiu subir. Tentei reiniciar o serviço, mas sem sucesso. Continuou no estado “Starting”.

 

Nome do Serviço: Search Host Controller Service


 

Para corrigir, re-provisione o serviço com esse script powershell:

 

$sh = Get-SPServiceInstance | ? {$_.TypeName -eq “Search Host Controller Service”}
$sh.Unprovision()
$sh.Provision($true)

 

Ou este:

 

$SA = Get-SPServiceInstance | Where {$_.Status -like “Provisioning”}

$SA.Unprovision()

$SA.Provision()

 

Depois que executar com sucesso, o resultado esperado será o serviço iniciado corretamente e a busca voltará a funcionar.


Abraço!

System.Runtime.InteropServices.COMException: The context has expired and can no longer be used

Olá! Alegre

Cenário:

Ao acessar um ambiente de homologação no cliente o menu de navegação do SharePoint estava apresentando erro.

E ao acessar o Site Settings > Navigation, outro erro explodia na tela.

ERRO:

“System.Runtime.InteropServices.COMException: The context has expired and can no longer be used”

SOLUÇÃO:

Pesquisando na web li algo sobre isso ocorrer por uma falta de sincronismo entre as configurações de “relógio” do SharePoint e às configurações de relógio do servidor.

Não encontrei uma forma mais “adequada” de resolver. Mas ao realizar um iisreset o problema foi resolvido. Se eu encontrar posteriormente uma melhor solução, volto e atualizo este post (conto com sua ajuda tbm! Smiley mostrando a língua).

Procuro evitar iisreset e/ou “boot” no servidor, pois quase sempre há outra forma de resolver. E muitas vezes, formas menos “agressivas”.

De toda forma, resolução inicial:

· Faça um IISRESET no servidor que o problema será resolvido.

Abraço!

SharePoint:DateTimeControl não funciona em formulário customizado. “Sorry, something went wrong”

Olá! Alegre

Cenário:

Precisei customizar um formulário no SharePoint 2013 e ao tentar abrir o calendário para selecionar uma data no DateTimeControl era exibido a mensagem de erro abaixo.

ERRO:

“Sorry, something went wrong”. Ou em português, algo similar a “Desculpe, algo deu errado.”

E ao procurar no ULS (LOGS) do SharePoint, a seguinte mensagem:

“Exception trying get context compatibility level: System.IO.FileNotFoundException: The site http://vmsp2013:80/_layouts/15/iframe.aspx?&cal=1&lcid=1046&langid=1046 could not be found in the Web application SPWebApplication Name=SharePoint – 80.”

SOLUÇÃO:

Demorei um tempo para reparar, mas percebi que a url não estava “correta”. Meu site utiliza “managed path”. Ou seja, seria algo como: http://vmsp2013/sites/meusite.

No SharePoint 2013 foi introduzido o “Host-Named SiteCollection” e acredito que por isso o DateTimeControl só está buscando no “root”. Mas, ainda há casos que precisamos manter compatibilidade antes de migrar para as novas tecnologias.

Enfim, o problema é causado por que NÃO existia sitecollection criada no root da WebApplication. Ao criar a sitecollection o problema foi resolvido, mas é necessário que o usuário tenha acesso a este site para que o controle DateTimeControl funcione.

Abraço!

Decryption failed with error 0

Olá! Alegre

Cenário:

Ao tentar buscar usuários no campo de pesquisa de usuários nenhum resultado é retornado.

Ao investigar os Logs do SharePoint, temos encontramos os erros a seguir…

ERRO:

Decryption failed with error: 0

at

at Microsoft.SharePoint.Administration.SPCredentialManager.DecryptWithApplicationCredentialKey(Byte[] rgbEncryptedPassphrase)

E este outro:

An exception occurred in AD claim provider when calling SPClaimProvider.FillSearch(): Erro durante a descriptografia. Código de erro do sistema 0..

SOLUÇÃO:

Devemos forçar a leitura do AD pela conta do appPool do SharePoint.

stsadm -o setapppassword -password "senha" (em todos os WFE’s)

stsadm -o setproperty -pn peoplepicker-searchadforests -pv "forest:dominio.com.br,dominio\conta,senhaDaConta;" –url <urlWebApp>

Abraço!

Como esconder o botão “Acompanhar” da Ribbon do SharePoint 2013

Olá,

Fiz recentemente um post de como esconder alguns links da MasterPage do SharePoint:

http://thiagottss.com.br/2014/03/31/como-esconder-skydrive-e-newsfeed-links-via-css/

E para remover alguns botões da Ribbon:

http://thiagottss.com.br/2014/04/09/esconder-botes-da-ribbon-ex-baixar-uma-cpia/

 

Mas ainda, podemos pesquisar e verificar que alguns botões são adicionados/removidos por feature do SharePoint. Assim sendo, podemos desativar um feature para que o botão suma…

Eis aqui um exemplo disso: O botão “Acompanhar” (Follow)

Screen Shot 2014-04-09 at 10.47.55 AM

Para remover esse botão basta desativar a feature (ID= A7A2793E-67CD-4dc1-9FD0-43F61581207A) no site (web) desejado.

Para desativar:

Disable-SPFeature –Identity A7A2793E-67CD-4dc1-9FD0-43F61581207A –Url http://urldomeusiteSharePoint