Se ha producido una excepción de acceso no controlado, msmq, error de Sharepoint
-
06-07-2019 - |
Pregunta
Tengo un problema que ocurre después de que mi servidor se reinicia. Tengo algunas características en SharePoint, para hacer varias cosas. Una cosa que hacen es agregar elementos en un par de colas MSMQ diferentes. Inmediatamente después de reiniciar el servidor, si intento iniciar sesión en SharePoint y voy a una página personalizada mía, y hago clic en un botón dentro de esa página (que luego crearía el elemento msmq), me lleva a una página que muestra el siguiente:
El sitio web declinó mostrar esta página web Este error (HTTP 403 prohibido) significa que Internet Explorer pudo conectarse al sitio web, pero no tiene permiso para ver la página web
Si profundizo en los registros de eventos, encuentro los siguientes errores en la aplicación:
Event ID: 1314
An unhandled access exception has occurred
AND in the Security event logs:
3 of these:
Event ID: 560
Object Open:
Object Server: SC Manager
Object Type: SERVICE OBJECT
Object Name: MSDTC
....
Accesses: Query status of service
Event ID: 560
Object Open:
Object Server: SC Manager
Object Type: SC_MANAGER OBJECT
Object Name: ServicesActive
...
Image File Name: C:\WINDOWS\system32\services.exe
...
Accesses: Connect to service controller
Query service database lock state
Event ID: 560
Object Open:
Object Server: SC Manager
Object Type: SERVICE OBJECT
Object Name: MSDTC
...
Image File Name: C:\WINDOWS\system32\services.exe
...
Accesses: Query service configuration information
TAMBIÉN, si profundizo en los registros de SharePoint, encuentro los siguientes errores:
Error de aplicación al acceder /my/site/url/MyPage.aspx, Error = Acceso es denegado. (Excepción de HRESULT: 0x80070005 (E_ACCESSDENIED)) Seguimiento de la pila del servidor: en System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy (String nodeName, Guid resourceManagerIdentifier, IntPtr managedIdentifier, Booleano & amp; nodeNameMatches, UInt32 & amp; paradero Tamaño, CoTaskMemHandle & amp; paradero Buffer, IResourceManagerShim & amp; resourceManagerShim) en System.Transactions.Oletx.DtcTransactionManager.Initialize () en System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory () a System.Transactions.Oletx.OletxTransactionManager.CreateTransaction (TransactionOptions propiedades) en System.Transactions.TransactionStatePromoted.EnterState (InternalTransaction tx) ...
... en System.Transactions.EnlistableStates.Promote (InternalTransaction tx)
en System.Transactions.Transaction.Promote () en System.Transactions.TransactionInterop.ConvertToOletxTransaction (Transacción transacción) en System.Transactions.TransactionInterop.GetDtcTransaction (Transacción transacción) en System.ServiceModel.Channels.MsmqQueue.GetNativeTransaction (MsmqTransactionMode transacciónMode) en System.ServiceModel.Channels.MsmqQueue.SendDtcTransacted (NativeMsmqMessage mensaje, MsmqTransactionMode transacciónMode) en System.ServiceModel.Channels.MsmqQueue.Send (mensaje NativeMsmqMessage, MsmqTransactionMode transacciónMode) en System.ServiceModel.MsmqIntegration.MsmqIntegrationOutputChannel.OnSend (Mensaje mensaje, TimeSpan timeout) en System.ServiceModel.Chann ...
Tengo dos máquinas virtuales, una para la máquina web (sharepoint) y otra para la máquina DB (donde se almacenan todos los dbs de contenido, etc.). El servidor de base de datos es un controlador de dominio primario, y ambas máquinas son parte del mismo dominio. He creado un usuario de dominio para usar para el grupo de aplicaciones de SharePoint.
Curiosamente, es posible hacer que los errores desaparezcan yendo a una parte diferente de mi aplicación y ejecutando ese código (que también agrega una entrada en el msmq). Una vez hecho esto, todo el resto de la aplicación funciona normalmente.
Cualquier ayuda sería increíblemente apreciada.
Nota: Noté que el error tenía algo que ver con el usuario anónimo (IUSR ...) en IIS para el sitio de SharePoint. Cambié a ese usuario para que sea un administrador de dominio, y el error ya no ocurre. Entonces, tiene algo que ver con los permisos del usuario de IUSR .., pero no sé qué ...
Solución
O M G
Ok, entonces intenté algo, fue un disparo LARGO, pero estaba en mi peor momento.
Envolví todo el código que estaba hablando con el MSMQ (agregando elementos a la cola) en la ejecución con privilegios elevados thang, ¡y funcionó!
SPSecurity.RunWithElevatedPrivileges (delegado () { // MSMQCode aquí });
Ahora, puedo reiniciar el servidor, y hacer las cosas que antes producían errores, ¡y funciona bien!
Otros consejos
Considere ejecutar scripts de calentamiento al reiniciar el servidor.
Otorgue permiso de lectura a todos al directorio bin en inetpub \ wss, etc.