lunes, 23 de mayo de 2016

Como resolver el Error /_vti_bin/client.svc/ProcessQuery UnauthorizedAccessException: Access is denied.

Escenario:

Una app de SharePoint o Add-in de SharePoint como Microsoft denomina ahora las apps en SharePoint dejo repentinamente de desplegar a todos los usuarios el contenido del app.

Esto no solo aplica a las apps sino a cualquier lista dentro de la Aplicación web de SharePoint, como veremos más adelante.  Así que si repentinamente dejo de ver un contenido pueda que este sea su caso.

El usuario me notificó que al agregar el usuario de red como administrador local del servidor, ya le mostraba el contenido del app.   Aún más confuso y extraño este comportamiento que al parecer eran permisos que no tenían los usuarios en el servidor, pero como descubrir si alguien hizo alguna modificación en el servidor ya que es un ambiente de un cliente administrador por el personal del cliente.

Después de revisar la configuración y servicios de Aplicaciones de la granja de SharePoint y constatar que todo estaba bien configurado y funcionando, procedí a indagar en los logs de SharePoint.   Para ello es necesario habilitar los siguientes eventos:



Y esto fue lo que obtuve en el log:
System.UnauthorizedAccessException: Access is denied. (Excepción de HRESULT: 0x80070005 (E_ACCESSDENIED))     en Microsoft.SharePoint.SPGlobal.HandleUnauthorizedAccessException(UnauthorizedAccessException ex)     en Microsoft.SharePoint.Library.SPRequest.UpdateField(String bstrUrl, String bstrListName, String bstrXML)     en Microsoft.SharePoint.SPField.UpdateCore(Boolean bToggleSealed)     en Microsoft.SharePoint.ServerStub.SPFieldServerStub.InvokeMethod(Object target, String methodName, XmlNodeList xmlargs, ProxyContext proxyContext, Boolean& isVoid)     en Microsoft.SharePoint.Client.ServerStub.InvokeMethodWithMonitoredScope(Object target, String methodName, XmlNodeList args, ProxyContext proxyContext, Boolean& isVoid)     en Microsoft.SharePoint.Client.ClientMethodsProcessor.InvokeMeth... d7c57d9d-5788-b0d0-3f2a-a19b4191ed7d
05/19/2016 12:04:25.15* w3wp.exe (0x3E6C)                       0x34F8 SharePoint Foundation         CSOM                           aiv4i High     ...pdate" Id="348" ObjectPathId="272" />List of all employees.
d7c57d9d-5788-b0d0-3f2a-a19b4191ed7d
05/19/2016 12:04:25.15* w3wp.exe (0x3E6C)                       0x34F8 SharePoint Foundation         CSOM                           aiv4i High     ...ldItemQuery>
http://app-369d6491a3e5c7.apps.bantrabgf.local/InfowareForgetNotEmployees d7c57d9d-5788-b0d0-3f2a-a19b4191ed7d
05/19/2016 12:04:25.15 w3wp.exe (0x3E6C)                       0x34F8 SharePoint Foundation         CSOM                           agmjp High     Original error: System.UnauthorizedAccessException: Access is denied.



Luego utilice Fiddler  para ver el tráfico de la aplicación:

Y me mostró la siguiente información:

Aunque el 401 es un mensaje de no autorizado es el comportamiento esperado con la autenticación ntlm ya que luego le sigue un 200 OK que indica que pudo realizar la acción solicitada.  Así que fiddler no me ayudo mucho en este caso.

La aplicación lo que hace es desplegar de una lista dentro del AppWeb el contenido, pero me estaba reportando un acceso denegado. No fue sino hasta que exporte la lista completa a excel que me percate que tenia 5008 elementos. Y esto me recordó el umbral de máximo de elementos por lista que tiene configuración SharePoint de forma predeterminada.  Y ahora hacía sentido que los usuarios administradores si podía ver el contenido ya que el umbral de los administradores y auditores es de 20,000 elementos.   

Solución:

Fue solo ampliar el umbral a nivel de aplicación web de 5,000 elementos a 10,000 elementos para que se pueda leer el contenido que no desplegaba.   Cómo hacerlo vea el siguiente enlace: http://stevemannspath.blogspot.com/2013/05/sharepoint-2013-list-view-threshold.html

Otras soluciones:

Depurar el listado de la lista, eliminando o filtrando el contenido ver este enlace:

http://en.share-gate.com/blog/demystifying-the-sharepoint-lists-thresholds

O bien modificando el código para que lea de forma filtrada.

https://blogs.msdn.microsoft.com/ericwhite/2009/11/20/using-the-sharepoint-2010-managed-client-object-model-accessing-large-lists/

Eso esto amigos, un día mas en las aguas profundas de SharePoint World!

Saludos,

Juan Manuel Herrera Ocheita

No hay comentarios.: