Une exception d'accès non gérée s'est produite, msmq, erreur Sharepoint
-
06-07-2019 - |
Question
J'ai un problème qui se produit après le redémarrage de mon serveur. J'ai quelques fonctionnalités dans SharePoint, pour faire diverses choses. Une chose qu’ils font est d’ajouter des éléments dans plusieurs files d’attente MSMQ. Immédiatement après le redémarrage d'un serveur, si j'essaie de me connecter à SharePoint et que je vais sur une page personnalisée, puis que je clique sur un bouton de cette page (ce qui créerait ensuite l'élément msmq), je suis redirigé vers une page qui affiche le message. suivant:
Le site Web a refusé d'afficher cette page Web. Cette erreur (HTTP 403 interdit) signifie qu'Internet Explorer a été en mesure de se connecter au site Web, mais qu'il n'est pas autorisé à afficher la page Web
.Si je fouille dans les journaux des événements, les erreurs suivantes apparaissent dans l'application:
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
AUSSI, si je fouille dans les journaux SharePoint, je trouve les erreurs suivantes:
Erreur d'application lors de l'accès /my/site/url/MyPage.aspx, Error = Access est refusé. (Exception de HRESULT: 0x80070005 (E_ACCESSDENIED)) Trace de la pile du serveur: à System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy (String nodeName, Guid resourceManagerIdentifier, IntPtr managedIdentifier, Boolean & amp; nodeNameMatches, UInt32 & amp; localisationTaille, CoTaskMemHandle & amp; localisationBuffer, IResourceManagerShim & amp; resourceManagerShim) à System.Transactions.Oletx.DtcTransactionManager.Initialize () à System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory () à System.Transactions.Oletx.OletxTransactionManager.CreateTransaction (TransactionOptions propriétés) à System.Transactions.TransactionStatePromoted.EnterState (InternalTransaction tx) ...
... sur System.Transactions.EnlistableStates.Promote (InternalTransaction tx)
à System.Transactions.Transaction.Promote () à System.Transactions.TransactionInterop.ConvertToOletxTransaction (Transaction transaction) à System.Transactions.TransactionInterop.GetDtcTransaction (Transaction transaction) à System.ServiceModel.Channels.MsmqQueue.GetNativeTransaction (MsmqTransactionMode transactionMode) à System.ServiceModel.Channels.MsmqQueue.SendDtcTransacted (NativeMsmqMessage message, MsmqTransactionMode transactionMode) à System.ServiceModel.Channels.MsmqQueue.Send (message NativeMsmqMessage, MsmqTransactionMode transactionMode) à System.ServiceModel.MsmqIntegration.MsmqIntegrationOutputChannel.OnSend (Message message, TimeSpan timeout) à System.ServiceModel.Chann ...
J'ai deux ordinateurs virtuels, un pour l'ordinateur Web (point de partage) et un ordinateur de la base de données (où sont stockés tous les fichiers dbs de contenu, etc.). Le serveur de base de données est un contrôleur de domaine principal et les deux ordinateurs font partie du même domaine. J'ai créé un utilisateur de domaine à utiliser pour le pool d'applications SharePoint.
Étrangement, il est possible d'éliminer les erreurs en accédant à une autre partie de mon application et en exécutant ce code (ce qui ajoute également une entrée dans le msmq). Ceci fait, tout le reste de l'application fonctionne normalement.
Toute aide serait extrêmement appréciée.
Remarque: j'ai remarqué que l'erreur avait quelque chose à voir avec l'utilisateur anonyme (IUSR ...) dans IIS pour le site SharePoint. J'ai changé cet utilisateur pour qu'il devienne un administrateur du domaine et l'erreur ne se produit plus. C’est donc quelque chose à voir avec les permissions de l’utilisateur IUSR .., mais je ne sais pas quoi ...
La solution
O M G
Ok, alors j’ai essayé quelque chose, c’était un coup long, mais j’étais à bout de forces.
J'ai enveloppé tout le code qui parlait avec le MSMQ (ajout d'éléments dans la file d'attente) lors de l'exécution avec des privilèges élevés thang, et cela a fonctionné !!!!
SPSecurity.RunWithElevatedPrivileges (delegate () { // MSMQCode ici });
Maintenant, je peux redémarrer le serveur et faire ce qui était erroné auparavant, et ça fonctionne bien!
Autres conseils
Pensez à exécuter des scripts de démarrage au redémarrage du serveur.
Donnez à tout le monde l’autorisation de lecture sur le répertoire bin sous inetpub \ wss etc ..