Mostrando postagens com marcador Project Server 2013. Mostrar todas as postagens
Mostrando postagens com marcador Project Server 2013. Mostrar todas as postagens

quarta-feira, 30 de dezembro de 2015

SharePoint 2013: ScopeNotFoundException: Workflow publicado não é exibido


O evento abaixo ocorre, se o (sub)escopo do subsite no Workflow Manager não foi criado. Isso pode ocorrer após a importação de um subsite.

Maiores detalhes sobre o escopo do fluxo de trabalho:
"A scope is a named and securable container for Activities, Workflows, Instances, configuration and child Scopes.. It also provides a boundary for multi-tenancy and messaging (notifications). Scopes can be created and modified using the Workflow Client API. It is represented in the Client API by the T:Microsoft.Workflow.Client.ScopeInfo class."

Evento no log do SharePoint:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Microsoft.Workflow.Client.ScopeNotFoundException: Scope '/SharePoint/default/<site collection GUID>/<subsite GUID>' was not found. HTTP headers received from the server - ActivityId: <GUID>. NodeId: <Server name>. Scope: /SharePoint/default/<site collection GUID>/<subsite GUID>. Client ActivityId : <GUID>. ---> System.Net.WebException: The remote server returned an error: (404) Not Found.
at Microsoft.Workflow.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)
at Microsoft.Workflow.Client.HttpGetResponseAsyncResult`1.End(IAsyncResult result)
at Microsoft.Workflow.Client.ClientHelpers.SendRequest[T](HttpWebRequest request, T content) -
-- End of inner exception stack trace ---
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Solução:

Execute os dois comandos abaixo para desabilitar e habilitar o feature oculto "WorkflowServiceStore" para forçar a cria do escopo, em seguida publique os fluxos de trabalhos.
1. Disable-SPFeature WorkflowServiceStore -Url <endereço do subsite>
2. Enable-SPFeature WorkflowServiceStore -Url <endereço do subsite>

quinta-feira, 22 de outubro de 2015

SharePoint 2013 - Workflow suspenso: HTTP 401 You do not have permission to perform this action or access this resource.


O fluxo de trabalho no SharePoint 2013 fica normalmente no estado suspenso com a mensagem de erro "
You do not have permission to perform this action or access this resource." se o fluxo está configurado para enviar e-mail(s) e para iniciar automaticamente.

Mensagem de erro no interface:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
RequestorId: <GUID>. Details: An unhandled exception occurred during the execution of the workflow instance. Exception details: System.ApplicationException: HTTP 401 {"error":{"code":"-2147024891, System.UnauthorizedAccessException","message":{"lang":"en-US","value":"Access denied. You do not have permission to perform this action or access this resource."}}} {"Transfer-Encoding":["chunked"],"X-SharePointHealthScore":["0"],"SPRequestGuid":["<GUID>"],"request-id":["<GUID>"],"X-FRAME-OPTIONS":["SAMEORIGIN"],"MicrosoftSharePointTeamServices":["15.0.0.4675"],"X-Content-Type-Options":["nosniff"],"X-MS-InvokeApp":["1; RequireReadOnly"],"Cache-Control":["max-age=0, private"],"Date":["<DATE>"],"Set-Cookie":["WSS_KeepSessionAuthenticated={<GUID>}; path=\/"],"Server":["Microsoft-IIS\/7.5"],"WWW-Authenticate":["NTLM"],"X-AspNet-Version":["4.0.30319"],"X-Powered-By":["ASP.NET"]} at Microsoft.Activities.Hosting.Runtime.Subroutine.SubroutineChild.Execute(CodeActivityContext context) at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Mensagem de error no log do SharePoint:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
It’s app only request, but the app <identity> is not allowed to use app only policy.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+


Solução: Ativar o feature “Workflows can use app permissions” na página OU desativar e ativar o feature novamente.

[]

quinta-feira, 30 de abril de 2015

Project Server 2013: Configurar um conjunto de sites nomeado por host para a instância do PWA.

PWA nomeado por host

Desde a versão 2003 do SharePoint (“scalable hosting mode”) existe a possibilidade de criar conjuntos de sites nomeados por host e é o método preferido para implantar sites no SharePoint 2013. O Office 365 usa conjuntos de sites nomeados por host e novos recursos foram otimizados para essa arquitetura. 
Uma das vantagens é o nome único no DNS, como por exemplo, http://projects.contoso.com e a possibilidade de diminuir o número de aplicações web na farm do SharePoint. 

A configuração requer o uso do Powershell e não é possível pela interface do SharePoint. O script do exemplo abaixo contém todos os passos necessários para criar o conjunto de sites nomeado por host desde a criação do banco de dados da instância do Project Server.

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
## Informe o endereço da instânica nova do Project Server, por exemplo: "http://projects.contoso.com".
$web = <"http://projects.contoso.com">
## Informe o endereço da aplicação web que vai hospedar o conjunto de sites nomeado por host, por exemplo: "http://sp2013svr1".
$webapplication = <"http://sp2013dev">
## Informe o nome da instância, por exemplo: "Projects Contoso".
$name = <"Projects Contoso">
## Informe a descrição da instância, por exemplo: "Projects Contoso".
$description = <"Projects Contoso">
## Informe o administrador da instância, por exemplo: "contoso\administrator".
$admin = <"contoso\administrator">
## Informe a idioma da instância do PWA, por exemplo: "1033" para inglês e "1046" para português.
$language = <"1033">
## Informe o nome do banco de dados desejado, por exemplo: "ProjectsContoso".
$db = <"ProjectsContoso">
## Informe o nome da aplicação do Project Server, por exemplo: "Project Server Service Application".
$sa = <"Project Server Service Application">
## Informe o nome do sevidor do SQL, por exemplo: "SQLSERVER\INSTANCIA".
$sql = <"SQLSERVER">

New-SPSite $web -HostHeaderWebApplication $webapplication -Name "$name" -Description "$description" -OwnerAlias "$admin" -language $language -Template "PWA#0"
New-SPProjectDatabase –Name "$db" -ServiceApplication "$sa" –DatabaseServer $sql -Tag "PS2013"
$sc = get-spweb $web
$sc.Properties[“PWA_TAG”]="PS2013"
$sc.Properties.Update()
Enable-SPFeature pwasite -URL "$web"
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

segunda-feira, 22 de dezembro de 2014

SharePoint 2013 - "The URL is invalid." na criação de subsites.


Os eventos abaixo ocorrem normalmente na criação de subsites caso que campos nativos foram modificados no pai do novo subsite.

1. O evento na interface do SharePoint:
Sorry, something went wrong The URL '<URL>/<SITE>.aspx' is invalid.  It may refer to a nonexistent file or folder, or refer to a valid file or folder that is not in the current Web.


2. No ULS: "The URL '<URL>/<SITE>.aspx' is invalid." 
System.Runtime.InteropServices.COMException: <nativehr>0x81020030</nativehr><nativestack></nativestack>The URL '<URL>/<SITE>.aspx' is invalid.  It may refer to a nonexistent file or folder, or refer to a valid file or folder th   at is not in the current Web., StackTrace:      at Microsoft.SharePoint.SPListItem.AddOrUpdateItem(Boolean bAdd, Boolean bSystem, Boolean bPreserveItemVersion, Boolean bNoVersion, Boolean bMigration, Boolean bPublish, Boolean bCheckOut, Boolean bCheckin, Guid newGuidOnAdd, Int32& ulID, Object& objAttachmentNames, Object& objAttachmentContents, Boolean suppressAfterEvents, String filename, Boolean bPreserveItemUIVersion)       at Microsoft.SharePoint.SPListItem.UpdateInternal(Boolean bSystem, Boolean bPreserveItemVersion, Guid newGuidOnAdd, Boolean bMigration, Boolean bPublish, Boolean bNoVersion, Boolean bCheckOut, Boolean bCheckin, Boolean suppressAfterEvents, String filename, Boolean bPreserveItemUIVersion)    

3. No ULS: "Parameter '@tp_Author' was supplied multiple times."
System.Data.SqlClient.SqlException (0x80131904): Parameter '@tp_Author' was supplied multiple times.             at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)             at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)             at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)             at System.Data.SqlClient.SqlDataReader.TryHasMoreRows(Boolean& moreRows)             at System.Data.SqlClient.SqlDataReader.TryReadInternal(Boolean setTimeout, Boolean& more)             at System.Data.SqlClient.SqlDataReader.TryNextResult(Boolean& more)             at System.Data.SqlClient.SqlDataReader.NextResult()             at Microsoft.SharePoint.SPSqlClient.ExecuteQueryInternal(Boolean retryfordeadlock)             at Microsoft.SharePoint.SPSqlClient.ExecuteQuery(Boolean retryfordeadlock)

O seguinte script identifica o campo a partir da coluna identificada "tp_author" no evento 3.
## informe o url do pai do novo subsite
$web = get-spweb "http://url/pai"
## informe a coluna identificada 
$web.fields | where-object {$_.schemaxml -like "*tp_author*"} | select title


Os desenvolvedores do SharePoint introduziram no SharePoint 2013 um novo método para esse caso - Microsoft.SharePoint.SPField.RevertCustomizations() que nós podemos utilizar para reverter as customizações em campos nativos:

($web.fields | where-object {$_.schemaxml -like "*tp_author*"}).RevertCustomizations()

Observação: Não utilize o método update para concluir a atualização, isso adicionaria a infomação (indesejada) da versão no schema do campo:



[] 

quinta-feira, 20 de novembro de 2014

SharePoint 2013 - Workflow suspenso: HTTP 401 Invalid JWT token



O fluxo de trabalho no SharePoint 2013 fica normalmente no estado suspenso com a mensagem de erro "HTTP 401 Invalid JWT token. Could not resolve issuer token." após a re-instalação do Workflow Manager. A causa é um token de autenticação (S2S - server to server autentication) inválido.

Mensagem de erro no interface:
An unhandled exception occurred during the execution of the workflow instance. Exception details: HTTP 401 {"error_descritption":Invalid JWT token. Could not resolve issuer token."}
Mensagem de error nos logs do SharePoint:

Application Authentication    High    SPApplicationAuthenticationModule: Invalid token or signature. Exception: System.IdentityModel.Tokens.SecurityTokenException: Invalid JWT token. Could not resolve issuer token.     at Microsoft.IdentityModel.S2S.Tokens.JsonWebSecurityTokenHandler.ReadTokenCore(String token, Boolean isActorToken)     at Microsoft.IdentityModel.S2S.Tokens.JsonWebSecurityTokenHandler.ReadActor(IDictionary`2 payload)     at Microsoft.IdentityModel.S2S.Tokens.JsonWebSecurityTokenHandler.ReadTokenCore(String token, Boolean isActorToken)     at Microsoft.SharePoint.IdentityModel.SPApplicationAuthenticationModule.TryExtractAndValidateToken(HttpContext httpContext, SPIncomingTokenContext& tokenContext)
SharePoint Foundation    Application Authentication    High    SPApplicationAuthenticationModule: Error authenticating request, Error details: Header: 3000006;reason="Token contains invalid signature.";category="invalid_client", Body: {"error_description":"Invalid JWT token. Could not resolve issuer token."}
SharePoint Foundation    General    Medium    Application error when access _vti_bin/client.svc, Error=Invalid JWT token. Could not resolve issuer token.   at Microsoft.IdentityModel.S2S.Tokens.JsonWebSecurityTokenHandler.ReadTokenCore(String token, Boolean isActorToken)     at Microsoft.IdentityModel.S2S.Tokens.JsonWebSecurityTokenHandler.ReadActor(IDictionary`2 payload)     at Microsoft.IdentityModel.S2S.Tokens.JsonWebSecurityTokenHandler.ReadTokenCore(String token, Boolean isActorToken)     at Microsoft.SharePoint.IdentityModel.SPApplicationAuthenticationModule.TryExtractAndValidateToken(HttpContext httpContext, SPIncomingTokenContext& tokenContext)

Solução:

Execute o timer job "Refresh Trusted Security Token Services Metadata feed" do SharePoint utilizando Powershell (Start-SPTimerJob RefreshMetadataFeed) ou na interface.

[]

quinta-feira, 16 de outubro de 2014

SharePoint 2013 - Workflow suspenso: System.ApplicationException: HTTP 401



O fluxo de trabalho no SharePoint 2013 fica normalmente no estado suspenso com a mensagem de erro "System.ApplicationException: HTTP 401" se o fluxo está configurado para enviar e-mail(s) para um grupo do SharePoint que não permite a exibição da associações.



Mensagem de erro no interface:
RequestorId: <GUID>. Details: An unhandled exception occurred during the execution of the workflow instance. Exception details: System.ApplicationException: HTTP 401 {"Transfer-Encoding":["chunked"],"X-SharePointHealthScore":["0"],"SPRequestGuid":["<GUID>"],"request-id":["<GUID>"],"X-FRAME-OPTIONS":["SAMEORIGIN"],"MicrosoftSharePointTeamServices":["15.0.0.4569"],"X-Content-Type-Options":["nosniff"],"X-MS-InvokeApp":["1; RequireReadOnly"],"Cache-Control":["max-age=0, private"],"Date":["Tue, 15 Oct 2014 14:24:05 GMT"],"Server":["Microsoft-IIS\/8.5"],"WWW-Authenticate":["NTLM"],"X-AspNet-Version":["4.0.30319"],"X-Powered-By":["ASP.NET"]}
Mensagem de error nos logs do SharePoint:


Exception occured in scope Microsoft.SharePoint.Utilities.SPUtility.SendEmail. Exception=System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))     at Microsoft.SharePoint.SPGlobal.HandleUnauthorizedAccessException(UnauthorizedAccessException ex)     at Microsoft.SharePoint.Library.SPRequest.GetUsersDataAsSafeArray(String bstrUrl, UInt32 dwUsersScope, UInt32 dwUserCollectionFlags, String bstrValue, UInt32 dwValue, UInt32& pdwColCount, UInt32& pdwRowCount, Object& pvarDataSet)     at Microsoft.SharePoint.SPUserCollection.InitUsersCore(Boolean fCustomUsers, String[] strIdentifiers, SPUserCollectionFlags ucf)     at Microsoft.SharePoint.SPBaseCollection.GetEnumerator()     at Microsoft.SharePoint.Utilities.SPUtility.ResolveAddressesForEmail(SPWeb web, IEnumerable`1 addresses, AddressReader func)     at Microsoft.SharePoint.Utilities.SPUtility.SendEmail_Client(EmailProperties properties)     at Microsoft.SharePoint.ServerStub.Utilities.SPUtilityServerStub.InvokeStaticMethod(String methodName, ClientValueCollection xmlargs, ProxyContext proxyContext, Boolean& isVoid)     at Microsoft.SharePoint.Client.ServerStub.InvokeStaticMethodWithMonitoredScope(String methodName, ClientValueCollection args, ProxyContext proxyContext, Boolean& isVoid)


Solução: Permitir a exibição das associações para todos os usuários do SharePoint ou utilizar um outro grupo.

Fontes:

HTTP Unauthorized to /_vti_bin/client.svc/sp.utilities.utility.SendEmail

[]

SharePoint 2013 - Workflow suspenso: System.ApplicationException: HTTP 500



O fluxo de trabalho no SharePoint 2013 fica normalmente no estado suspenso com a mensagem de erro "System.ApplicationException: HTTP 500" se o fluxo está configurado para enviar e-mail(s) para um grupo do SharePoint e o email de saida não está configurado no SharePoint.

Mensagem de erro no interface:
RequestorId: <GUID>. Details: An unhandled exception occurred during the execution of the workflow instance. Exception details: System.ApplicationException: HTTP 500 {"Transfer-Encoding":["chunked"],"X-SharePointHealthScore":["0"],"SPClientServiceRequestDuration":["12"],"SPRequestGuid":["<GUID>"],"request-id":["<GUID>"],"X-FRAME-OPTIONS":["SAMEORIGIN"],"MicrosoftSharePointTeamServices":["15.0.0.4569"],"X-Content-Type-Options":["nosniff"],"X-MS-InvokeApp":["1; RequireReadOnly"],"Cache-Control":["max-age=0, private"],"Date":[" Oct 2014 11:42:51 GMT"],"Server":["Microsoft-IIS\/8.5"],"X-AspNet-Version":["4.0.30319"],"X-Powered-By":["ASP.NET"]} at Microsoft.Activities.Hosting.Runtime.Subroutine.SubroutineChild.Execute(CodeActivityContext context) at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation)

Mensagem de error nos logs do SharePoint:


Exception occured in scope Microsoft.SharePoint.Utilities.SPUtility.SendEmail. Exception=System.Configuration.ConfigurationErrorsException: Exception of type 'System.Configuration.ConfigurationErrorsException' was thrown.     at Microsoft.SharePoint.Utilities.SPUtility.SendEmail_Client(EmailProperties properties)     at Microsoft.SharePoint.ServerStub.Utilities.SPUtilityServerStub.InvokeStaticMethod(String methodName, ClientValueCollection xmlargs, ProxyContext proxyContext, Boolean& isVoid)     at Microsoft.SharePoint.Client.ServerStub.InvokeStaticMethodWithMonitoredScope(String methodName, ClientValueCollection args, ProxyContext proxyContext, Boolean& isVoid)
Solução: Permitir a exibição das associações para todos os usuários do SharePoint ou utilizar um outro grupo.

Solução: Configurar email de saída para um farm do SharePoint 2013

Fontes:

Configure outgoing email for a SharePoint 2013 farm

[]

SharePoint 2013 - Workflow suspenso: System.ArgumentNullException: Value cannot be null.

O fluxo de trabalho no SharePoint 2013 fica normalmente no estado suspenso com a mensagem de erro "Value cannot be null." se o fluxo está configurado para enviar e-mail(s) para um grupo do SharePoint sem membros.


RequestorId: <GUID> Details: An unhandled exception occurred during the execution of the workflow instance. Exception details: System.ArgumentNullException: Value cannot be null. Parameter name: Input at Microsoft.Activities.Hosting.Runtime.Subroutine.SubroutineChild.Execute(CodeActivityContext context) at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance, ActivityExecutor executor, BookmarkManager bookmarkManager) at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor, BookmarkManager bookmarkManager, Location resultLocation) 

Solução: Adicionar usuários para o grupo ou utilizar um outro grupo.

[]

sexta-feira, 5 de setembro de 2014

Project Server 2013 - Falha na publicação do projeto: SynchronizeTaskListInManagedModeMessage

A mensagem de erro na fila do servidor ocorre principalmente para projetos que utilizam páginas de projetos customizadas.
<?xml version="1.0" encoding="utf-16"?>
<errinfo>
 <general>
  <class name="Microsoft.Office.Project.Server.BusinessLayer.Queue.Message">
   <error id="23000" name="ProjectPublishFailure" uid="<UID>" projectuid="<PUID>" messagetype="Microsoft.Office.Project.Server.BusinessLayer.QueueMsg.SynchronizeTaskListInManagedModeMessage" messageID="38" stage="" blocking="Block"/>
  </class>
  <class name="Queue">
   <error id="26000" name="GeneralQueueJobFailed" uid="<UID>" JobUID="<JobUID>" ComputerName="<GUID>" GroupType="ProjectPublish" MessageType="SynchronizeTaskListInManagedModeMessage" MessageId="38" Stage="" CorrelationUID="<CORRELATION"/>
  </class>
 </general>
</errinfo>

Nesse caso especifico porque o campo "assigned to" não permite entradas múltiplas ou não existe. A lista alimenta também o service application "Work Management Service Application".

A solução é simples - 

1. Configurar o campo para permitir entradas múltiplas :


2. Desabilitar e habilitar o feature "Project Functionality" novamente:


SharePoint 2013: Work Management Service Application


[]



sexta-feira, 13 de junho de 2014

SharePoint 2013: Fluxos de trabalho ignoram permissões atribuídas por meio de grupos de segurança do AD


Eu observei esses dias um comportamento interessante nos fluxos de trabalho do Workflow Manager – os mesmos ignoram (aparentemente) permissões atribuídas por grupos de segurança do AD no SharePoint, que é uma pratica recomendada pela MS.

Temos as seguintes mensagens na interface:

Inglês:

HTTP 401 {"error":{"code":"-2147024891, System.UnauthorizedAccessException","message":{"lang":"en-US","value":"Access denied. You do not have permission to perform this action or access this resource."}}}

Português:

HTTP 401 {"error":{"code":"-2147024891, System.UnauthorizedAccessException","message":{"lang":"pt-BR","value":"Acesso negado.
Você não tem permissão para executar esta ação ou acessar este recurso."}}}

E os seguintes eventos foram identificados nos logs do SharePoint (Verbose):

1.       SharePoint Foundation                Claims Authentication   af32v     Verbose              Claims Windows Sign-In: Sending 401 for request <URL> because the user is not authenticated and resource requires authentication.
2.       SharePoint Foundation                Claims Authentication   af32v     Verbose              Claims Windows Sign-In: Sending 401 for request <URL>/_vti_bin/client.svc/web/lists/getbyid(guid'<GUID>')/Items?$filter=GUID+eq+<GUID> '' because the request is not from a browser.

SharePoint necessita o perfil do usuário no aplicativo de serviço “User Profile Service Application” para autenticar o usuário representado pelo fluxo de trabalho. E nesse caso especifico ser sincronizado com a OU que contém o grupo de segurança em questão.

Obs.: Você precisará sincronizar os perfis novamente se um novo usuário for adicionado ao grupo. 


segunda-feira, 24 de março de 2014

SharePoint 2013 - Distributed Cache: Uma visão geral

A autenticação no SharePoint 2010 e versões anteriores acontece no nível do servidor dentro do IIS (Internet Information Services). Um cookie de autenticação é amarrado no servidor (normalmente como session cookie) e era necessário se autenticar novamente acessando um outro servidor no mesmo farm.
Acima requer "sticky sessions" em um cenário que envolve um NLB, para que o NLB redireciona  todos os dados ao servidor aonde ocorreu a autenticação.

SharePoint 2013 utiliza uma versão customizada do produto Windows App Fabric (conhecido também como Velocity) que está implementado e conhecido como Distributed Cache (DC) Service.
O DC é basicamente uma segunda camada de cache e compartilhada entre os servidores em um farm. SharePoint utiliza as vantagens deste serviço especificamente através dos perfis dos usuários e na autenticação.




Isso permite, no caso dos perfis dos usuários que tudo esteja "em sincronia" e minimiza os visíveis "post backs" para o servidor, porque o navegador "posts" para o cluster do Distributed Cache que é residente na memória dos servidores e retorna os dados mais rápido. Nos bastidores, um processo é responsável pelo sincronismo dos dados entre o DC e dos bancos de dados. Isto melhora drasticamente o tempo de resposta.

Isso significa que para a autenticação, as informações de autenticação persistem acima do nível do cache do IIS e permite que os balanceadores de carga (NLB) equilibrem ativamente a carga de todos os pedidos. Assim, você poderá obter uma página que você solicitou ao servidor A, mas todas as imagens podem vir do servidor B. O resultado final é uma resposta mais rápida e um farm do SharePoint mais equilibrado.

Informações avançadas:


Overview of microblog features, feeds, and the Distributed Cache service in SharePoint Server 2013
Gerenciar preenchimento do cache de feed e cache de última modificação no SharePoint Server 2013
Planejamento e uso do serviço Cache Distribuído no SharePoint Server 2013
AppFabric Caching and SharePoint: Concepts and Examples (Part 1)
Plano para computação social e colaboração no SharePoint Server 2013
SharePoint 2013 - Distributed Cache (App Fabric) Error Codes

quarta-feira, 5 de março de 2014

SharePoint 2013 SP1 - Perguntas mais frequentes

Eu utilizarei esse post para responder todas as perguntas que eu recebi ao repeito do SP1 do SharePoint 2013.

Pergunta: A instalação da atualização cumulativa de março de 2013 é um pre-requisito para instalar o SP1 do SharePoint 2013?
Resposta: Não. O único pré-requisito é o SharePoint 2013 na versão RTM.

Pergunta: Qual é o número da versão do SP1?
Resposta: 15.0.4569.1506

Pergunta: Qual é o número da versão que você vai ver no Central Administration?
Resposta: A versão do banco de dados da configuração do SharePoint é 15.0.4569.1000.

Pergunta: Eu preciso também instalar o SP1 do SharePoint Foundation?
Resposta: Não. O SP1 do SharePoint Server 2013 contém o SP1 do SharePoint Foundation.

Pergunta: Eu também preciso instalar o SP1 do Project Server?
Resposta: Sim. O SP1 do SharePoint não contem os binarios do SP1 do Project Server.

Pergunta: Eu preciso executar o wizard do SharePoint depois da atualização?
Resposta: Sim. Como sempre :).

Pergunta: Eu tenho Sharepoint instalado com 3 language packs. Eu preciso instalar o SP1 para cada idioma?
Resposta: Sim. O SP1 não contem as atualizações dos language packs. 

[]

quarta-feira, 26 de fevereiro de 2014

SharePoint 2013 - lançamento do SP1

O service pack numero um foi liberado, seguem os links/KBs.

Service Pack 1 para Microsoft SharePoint Server 2013 (KB2817429)http://support.microsoft.com/kb/2817429
Service Pack 1 para Microsoft SharePoint Foundation 2013 (KB2817439)
Service Pack 1 para Microsoft Project Server 2013 (KB2817434) http://support.microsoft.com/kb/2817434
Service Pack 1 para Microsoft SharePoint Server 2013 Language Pack (KB2817438) http://support.microsoft.com/kb/2817438
Service Pack 1 para Microsoft Office Web Apps Server (KB2817431) http://support.microsoft.com/kb/2817431
Service Pack 1 para Microsoft Office 2013 (KB2817430) 32/64-Bit Edition http://support.microsoft.com/kb/2817430

Essa planilha contem detalhes dos SPs


Boa atualização!


[]

sexta-feira, 14 de fevereiro de 2014

Workflow Manager - Failed to query the Oauth S2S metadata endpoint

Eu configurei esses dias um novo ambiente para desenvolver fluxos de trabalho e encontrei um comportamento interessante. 
Observação: Eu entendo abaixo como workaround e não recomendo a seguir esses passos em um ambiente de produção.

O cenário é seguinte: Web Application configurado para utilizar http e o Workflow Manager (WFM) para não aceitar conexões http.



1. Registrando o WFM no SharePoint resulta em seguinte evento no Powershell:

Register-SPWorkflowService -SPSite "http://sp2013dev/" -WorkflowHostUri "https://sp2013dev.contoso.com:12290" -force

Register-SPWorkflowService : Failed to query the OAuth S2S metadata endpoint
at URI 'http://sp2013dev/_layouts/15/metadata/json/1'. Error details: 'The
metadata endpoint responded with an error. HTTP status code: Forbidden.'. HTTP
headers received from the server - ActivityId:
d5911e15-e529-469b-887a-24629551f543. NodeId: SP2013DEV. Scope: /SharePoint.
Client ActivityId : 3b09edcf-2fee-4ea8-98b0-699c58fba14e.
At line:1 char:1
+ Register-SPWorkflowService -SPSite "http://sp2013dev/" -WorkflowHostUri
"https:/ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
    + CategoryInfo          : InvalidData: (Microsoft.Share...WorkflowService:
   RegisterSPWorkflowService) [Register-SPWorkflowService], InvalidRequestExc
  eption
    + FullyQualifiedErrorId : Microsoft.SharePoint.WorkflowServices.PowerShell
   .RegisterSPWorkflowService

Nos logs do SharePoint o seguinte evento:

02/13/2014 05:30:41.01   PowerShell.exe (0x17E0)          0x002C       SharePoint Foundation  PowerShell  6tf2   High         Microsoft.Workflow.Client.InvalidRequestException: Failed to query the OAuth S2S metadata endpoint at URI 'http://sp2013dev/_layouts/15/metadata/json/1'. Error details: 'The metadata endpoint responded with an error. HTTP status code: Forbidden.'. HTTP headers received from the server - ActivityId: 71ac11da-2767-4d34-b9fd-0537e08c0bf0. NodeId: SP2013DEV. Scope: /SharePoint. Client ActivityId : 05cdfb77-c6c3-4526-9686-1e09bf084eee. ---> System.Net.WebException: The remote server returned an error: (400) Bad Request.     at Microsoft.Workflow.Common.AsyncResult.End[TAsyncResult](IAsyncResult result)     at Microsoft.Workflow.Client.HttpGetResponseAsyncResult`1.End(IAsyncResult result)     at Microsoft.Workflow.Client.ClientHelpers.SendRequest[T](HttpWebRequest request, T content)     --- End of inner exception stack trace ---     at Microsoft.Workflow.Client.ClientHelpers.SendRequest[T](HttpWebRequest request, T content)     at Microsoft.Workflow.Client.WorkflowManagementClient.SendRequest[T](HttpWebRequest request, T content)     at Microsoft.Workflow.Client.ScopeManager.PublishScopeInternal(ScopeDescription description, String[] pathSegments)     at Microsoft.SharePoint.WorkflowServices.WorkflowServerPairingContext.EnsureFarmScope(Boolean configureOAuth)     at Microsoft.SharePoint.WorkflowServices.PowerShell.RegisterSPWorkflowService.InternalProcessRecord()     at Microsoft.SharePoint.PowerShell.SPCmdlet.ProcessRecord()    05cdfb77-c6c3-4526-9686-1e09bf084eee

Todos os eventos indicaram problemas no acesso do endpoint "http://sp2013dev/_layouts/15/metadata/json/1" e realmente o acesso na pagina utilizando o navegador  resultou em 403 (forbidden).

Eu executei o mesmo comando com o parâmetro -AllowOAuthHttp com sucesso, sem problemas no endpoint, conforme abaixo:



Eu removi em seguida o Workflow Service Application com o comando Get-SPWorkflowServiceApplicationProxy | Remove-SPServiceApplicationProxy para reproduzir o problema novamente.

E desta vez consegui registar o WFM sem o parametro -AllowOAuthHttp....



PS C:\Users\administrator.CONTOSO> Get-SPWorkflowServiceApplicationProxy | Remove-SPServiceApplicationProxy

Confirm
Are you sure you want to perform this action?
Performing operation "Remove-SPServiceApplicationProxy" on Target
"WorkflowServiceApplicationProxy Name=Workflow Service Application Proxy".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
(default is "Y"):y
PS C:\Users\administrator.CONTOSO> Register-SPWorkflowService -SPSite "http://sp2013dev/" -WorkflowHostUri "https://sp2013dev.contoso.com:12290" -force
WARNING: Overwriting existing scope named "SharePoint" in the workflow server.
 If another SharePoint farm was registered using this scope, that farm may not
be able to continue working with the workflow server unless re-registered under
 another scope name.
PS C:\Users\administrator.CONTOSO>


[]



sexta-feira, 7 de fevereiro de 2014

Microsoft Project Server - Performance and Capacity Planning Best Practices


Segue um White Paper excelente que contém informações detalhadas sobre os Best Practices do "Performance and Capacity Planning". 
O foco é o Project Server 2007, porém (na minha visão) valido para 2010 e 2013.


[]

quarta-feira, 5 de fevereiro de 2014

SharePoint - Script para listar o histórico dos timer jobs

Segue um script para listar o histórico dos timer jobs do SharePoint. Essas informações são valiosas para identificar a causa raiz de um problema na execução dos timer jobs.
Você poderia avaliar os logs ULS e os eventos do Windows baseado nas informações gerados pelo script.

# Timer Job Execution History
# Created by David Amenda
# http://spinternals.blogspot.com.br


Add-PSSnapin -Name Microsoft.SharePoint.PowerShell –erroraction SilentlyContinue

$timerjobs = Get-SPTimerJob
$dataS = read-host "Informe a data do inicio (MM/DD/AAAA)"
$dataE = read-host "Informe a data do término (MM/DD/AAAA)"
$history = read-host "Informe o lugar para salvar o hostórico (c:\temp)"

$timerjobs | foreach {
(Get-SPTimerJob –Identity $_.Id).HistoryEntries | Where {$_.StartTime –ge $dataS -and $_.EndTime –ge $dataE} | select StartTime,EndTime,JobDefinitionTitle | convertto-csv

} | Out-File $history\historico.csv

Abraços

terça-feira, 4 de fevereiro de 2014

SharePoint - ULS VerboseEx(treme)

Normalmente configuramos os logs do SharePoint para visualizar eventos com a severidade "verbose" para identificar problemas no ambiente.
No SharePoint existe uma severidade ainda mais alta: VerboseEx, que é muito útil em um ambiente de desenvolvimento ou homologação. O SharePoint gera logs gigantescos no modo VerboseEx, nunca usa o comando abaixo em um ambiente produtivo :).

Set-SPLogLevel -EventSeverity Verbose -TraceSeverity VerboseEx

Utilize o comando para deixar a severidade dos logs em modo normal: Clear-SPLogLevel


Set-SPLogLevel

segunda-feira, 3 de fevereiro de 2014

SharePoint - Workflow History / Histórico dos fluxos de trabalho


Existe uma confusão sobre o Timer Job "Workflow Auto Cleanup" que é executado diariamente. Muitas pessoas acreditam que elas vão perder o histórico dos fluxos de trabalho e desabilitam o job que impacta no desempenho do SharePoint.

A finalidade deste job é apenas deletar instâncias e tarefas relacionados pós finalização. SharePoint mantém uma lista "hidden" (escondida) desses itens, que poderá ser acessada adicionando /lists/Workflow%20History no final do endereço da biblioteca ou lista (por exemplo: contoso.com/lista123/lists/Workflow%20History).

Também existe a possibilidade de tirar o flag "hidden" e visualizar o histórico para facilitar o acesso por meio do script abaixo:

$web = Get-SPWeb "http://intranet.contoso.com"
$list = $web.Lists["Workflow History"]
$list.Hidden = $false
$list.Update()

Obs.: Essa lista não é muito detalhada, você deverá verificar se ela contém os dados necessários. A MS recomenda a utilizar a auditoria do SharePoint para atender os requerimentos de uma auditoria interna.


Grande abraço

terça-feira, 28 de janeiro de 2014

SharePoint - PowerShell script para limpar o cache da configuração

Limpar o cache da configuração do SharePoint é um troubleshooting valido para inúmeros situações, porém é um processo chato e desgastante quando você precisar aplicar isto em mais o que um servidor (imagine um ambiente com 15 ou mais servidores:).

O script do PowerShell abaixo limpa o cache conforme o KB939308.


## cleaning configuration cache based on  MS kb939308
Add-PSSnapin -Name Microsoft.SharePoint.PowerShell –erroraction SilentlyContinue

Stop-Service SPTimerV4
$folders = Get-ChildItem C:\ProgramData\Microsoft\SharePoint\Config
foreach ($folder in $folders)
    {
    $items = Get-ChildItem $folder.FullName -Recurse
    foreach ($item in $items)
        {
            if ($item.Name.ToLower() -eq "cache.ini")
                {
                    $cachefolder = $folder.FullName
                }
               
        }
    }
$cachefolderitems = Get-ChildItem $cachefolder -Recurse
    foreach ($cachefolderitem in $cachefolderitems)
        {
            if ($cachefolderitem -like "*.xml")
                {
                   $cachefolderitem.Delete()
                }
       
        }
       
$a = Get-Content  $cachefolder\cache.ini
$a  = 1
Set-Content $a -Path $cachefolder\cache.ini
start-Service SPTimerV4
IISRESET

Abraços